2012-04-17 25 views
19

Tôi đã subclassed UITableViewCell và trong lớp mà tôi áp dụng một cử chỉ recogniser Pan:UIPanGestureRecognizer trên UITableViewCell đè UITableView của xem di chuyển cử chỉ recognizer

UIPanGestureRecognizer *panning = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanning:)]; 
panning.minimumNumberOfTouches = 1; 
panning.maximumNumberOfTouches = 1; 
[self.contentView addGestureRecognizer:panning]; 
[panning release]; 

sau đó tôi thực hiện các giao thức đại biểu trong đó có nghĩa vụ phải cho phép cử chỉ đồng thời trong xem bảng của:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

Sau đó, tôi đặt một khúc gỗ bên trong phương pháp handlePanning chỉ để xem khi nó được phát hiện:

- (void)handlePanning:(UIPanGestureRecognizer *)sender { 
    NSLog(@"PAN"); 
} 

Vấn đề của tôi là tôi không thể cuộn dọc theo danh sách ô trong bảng nhìn và rằng handlePanning được gọi là bất kể hướng tôi xoay.

Điều tôi muốn là cho handlePanning chỉ được gọi khi chỉ quét ngang và không thẳng đứng. Sẽ đánh giá cao một số hướng dẫn.

Trả lời

16

Bạn đã thử đặt pannings thuộc tính ủy quyền?

panning.delegate = /* class name with the delegate method in it */; 

Bạn cũng sẽ cần phải tuân thủ lớp đó để UIGestureRecognizerDelegate.

2

Thêm recogniser cử chỉ On tableview. Từ đó, bạn có thể lấy đối tượng ô. Từ đó bạn có thể xử lý chức năng của ô. Đối với mỗi cử chỉ, sẽ có trạng thái kết thúc, thay đổi, kết thúc. Vì vậy, lưu trữ vị trí bắt đầu.

CGPoint beginLocation = [gesture locationInView:tblView]; // touch begin state. 

    CGPoint endLocation = [gesture locationInView:tblView]; // touch end state. 

Sử dụng điểm này, bạn có thể nhận được indexPath

NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:beginPoint]; 

Từ indexPath này, bạn có thể truy cập vào các tế bào.

  UITableViewCell *cell = [tableview cellForRowAtIndexPath : indexPath]; 

Sử dụng đối tượng ô này, bạn có thể xử lý.

+1

"indexPathForRowAtPoint" - cảm ơn, chính xác tôi đã tìm kiếm –

-1

Bạn đã thử đặt thuộc tính bị trả về là KHÔNG?

+1

WOW! Gì?! ^. ^ –

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