2014-03-13 76 views
1

我有一個UITableView我在其中填充自定義生成的UITableViewCells。這些有一張照片和一些標籤。iphone - 執行segue從自定義TableCellView

是否有任何方式,當點擊圖片時,它執行某個segue,但當我點擊每個標籤時,它執行不同的segues。我只想在單擊UIImageView或UILabels時執行這些segues。

我目前在玩下面的想法。

  1. 中的cellForRowAtIndexPath在創建他們的時候添加手勢識別器來的UIImageView和UILables
  2. 以上觸摸手勢將觸發SEGUE

我的代碼看起來像這樣在我創造我UITableViewCells中的UITableView的cellForRowAtIndexPath委託

cell.myImage.userInteractionEnabled = YES; 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)]; 
    singleTap.numberOfTapsRequired = 1; 
    singleTap.delegate = self; 
    [cell.myImage addGestureRecognizer:singleTap]; 

當我點擊th表時,這將重寫表視圖的didSelectRowAtIndexPath委託e UIImageView,所以我試着從doSomething:函數中觸發segue,但是這個函數並不知道UITableView indexPath,因此無法將正確的信息發送到目標視圖控制器(它總是發送0)。

我敢肯定,必須有一個容易做到這一點

任何想法歡迎。提前致謝。

回答

0

你可以得到電池myImageNSIndexPath屬於中加入以下挖掘處理器doSomething:

- (void)doSomething:(UITapGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) { 
     CGPoint touch = [sender locationInView:self.tableView]; 
     NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:touchPoint]; 

     NSLog(@"indexPath: %@", indexPath); 

    //Select cell and trigger didSelectRowAtIndexPath: 

     [self.myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 
     [self tableView:self.myTableView didSelectRowAtIndexPath:indexPath]; 
    } 
} 
+0

我在哪裏添加此代碼?由singleTap觸發的方法沒有定義事件標識符,因此UITouch * touch = [[allTouch] anyObject];失敗。 – anothersanj

+0

@anothersanj - 更新了我的答案! –

+0

哇,太好了,謝謝!我的doSomething方法現在具有所選tableCell的indexPath。有沒有什麼辦法讓我把它傳遞給prepareForSegue方法或者通過編程方式觸發didSelectRowAtIndexPath,這樣segue就可以用正確的indexPath來執行了? – anothersanj

0

UIGestureRecognizers有一個可以訪問的視圖屬性。遍歷該視圖的超級視圖,直到你有UITableViewCell並調用:

[tableView indexPathForCell:cell]; 

應該給你IndexPath。