2012-02-20 35 views
7

Tôi muốn hai tương tác trên ô xem bảng: nhấn bình thường và nhấn và giữ. Tôi đã sử dụng câu trả lời cho những điều sau đây để giúp tôi bắt đầu:cử chỉ báo chí dài trên ô xem bảng

Long press on UITableView

Vấn đề với đó là nếu tôi làm một báo dài trên một tế bào có hiệu lực, các tế bào sẽ làm nổi bật màu xanh, và những cử chỉ báo dài không không cháy (nó nghĩ nó chỉ là một cú chạm đơn giản). Tuy nhiên, nếu tôi bắt đầu cử chỉ báo chí dài trên một ô không hợp lệ, sau đó trượt ngón tay của tôi qua một ô hợp lệ sau đó phát hành, nó hoạt động tốt.

+1

"ô không hợp lệ" theo định nghĩa của bạn là gì? – omz

+0

Tôi nghĩ rằng "không cần di động" của nó –

Trả lời

-2

lẽ vô hiệu hóa lựa chọn trong IB hoặc programatically

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
+0

Điều này chỉ đơn giản là chỉ cần vô hiệu hóa làm nổi bật màu xanh? – user1120008

+0

Lý thuyết của tôi là cử chỉ báo chí dài của bạn không kích hoạt vì ô đã được tô sáng. Xin vui lòng, kiểm tra đề nghị của tôi, bạn sẽ không mất bất cứ điều gì. –

+0

Không may mắn với cách tiếp cận đó. – user1120008

23

Có lẽ là một tốt hơn trả lời trên mạng, nhưng đây là một cách để làm điều đó:

Đầu tiên tạo ra một cử chỉ recognizer báo chí dài trên bàn tự xem.

UILongPressGestureRecognizer* longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPress:)]; 
[self.tableView addGestureRecognizer:longPressRecognizer]; 

Sau đó, xử lý nó một thói quen mà có thể tìm thấy hàng đã chọn:

-(void)onLongPress:(UILongPressGestureRecognizer*)pGesture 
{ 
if (pGesture.state == UIGestureRecognizerStateRecognized) 
{ 
    //Do something to tell the user! 
} 
if (pGesture.state == UIGestureRecognizerStateEnded) 
{ 
    UITableView* tableView = (UITableView*)self.view; 
    CGPoint touchPoint = [pGesture locationInView:self.view]; 
    NSIndexPath* row = [tableView indexPathForRowAtPoint:touchPoint]; 
    if (row != nil) { 
     //Handle the long press on row 
    } 
} 
} 

Tôi đã không thử nó, nhưng tôi nghĩ rằng bạn có thể giữ hàng hiển thị lựa chọn bằng cách làm cho cử chỉ công cụ nhận dạng trên chế độ xem bảng chờ báo chí dài bị lỗi.

2

Tôi gặp phải vấn đề tương tự và tìm thấy giải pháp tốt. (ít nhất là trên iOS 7)

Thêm này UILongPressGestureRecognizer vào chính ô đó.

self.longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onSelfLongpressDetected:)]; 
[self addGestureRecognizer:self.longPressGesture]; 

lạ nhưng quan trọng đối với init với mục tiêu của bản thân và cũng thêm một lần nữa để gestureRecognizer tự và phương pháp onSelfLongpressDetected được gọi của nó.

0

Tôi gặp sự cố gần với điều này. Trước tiên, tôi đã cố gắng thêm một cử chỉ báo chí dài cho một UIView bên trong một tế bào có thể lựa chọn và nó không hoạt động. Giải pháp là thêm cử chỉ vào chính tế bào, như đã nói trước đó trong câu trả lời của Fabio.

Thêm dung dịch trong dưới nhanh chóng:

let longPress = UILongPressGestureRecognizer.init(target: self, action: #selector(longPress(_:))) 
longPress.minimumPressDuration = 1.0 
cell.addGestureRecognizer(longPress) 

tôi đã sử dụng mã trên bên trong phương pháp cellForRowAtIndexPath UITableViewDataSource.

Các vấn đề liên quan