簡體   English   中英

輕按單元格中的UILabel或UIImageView時,無法在prepareForSegue中獲得正確的indexPath.row值,

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM