[英]Can not get correct value of indexPath.row in prepareForSegue when UILabel or UIImageView in a cell is tapped,
我正在使用UITableView開發iOS應用。
輕按單元格中的UILabel或UIImageView時,將調用segue並移至另一個屏幕。
我正在編寫以下代碼,但是在prepareForSegue中無法獲取indexPath.row的正確值,該值始終為0。
- (void)goToDetail: (UITapGestureRecognizer *)sender{
[self performSegueWithIdentifier:@"showDetail" sender:self];
NSLog(@"aaa");
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
DetailViewController *detailViewController = [segue destinationViewController];
detailViewController.article = _article[indexPath.row];
NSLog(@"bbb%d",indexPath.row);
}
}
NSLog表示以下。
2014-08-08 17:50:23.267 eleventhtest[27374:60b] bbb0
2014-08-08 17:50:23.269 eleventhtest[27374:60b] aaa
你能告訴我如何解決這個問題嗎?
作為可能的選項之一,您可以在創建單元格時為label / imageView和手勢識別器設置標簽。 該標記將與indexPath.row相同。 在goToDetail方法中,您可以將此標簽分配給一些內部屬性,然后在prepareForSegue中使用它。
如果您要在didSelectRowAtIndexPath
方法中調用goToDetail
,並將segue從原型行連接到detailViewController,則sego在goToDetail方法之前觸發。
解決方案:直接從您的視圖控制器中選擇到您的detailViewController並調用[self performSegueWithIdentifier:@"showDetail" sender:self];
在didSelectRowAtIndexPath
方法中。
另外,您可以創建NSIndexPath屬性並在didSelectRowAtIndexPath方法中設置值,然后segue將使用該屬性,而不是嘗試訪問[self.tableView indexPathForSelectedRow]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.