对UITableView使用didSelectRowAtIndexPath或prepareForSegue方法?

Jon*_*Jon 100 iphone objective-c storyboard uitableview ios

我正在使用故事板,我有一个UITableView.我有一个segue设置,从我的表推送到细节VC.但是我应该使用哪种方法来处理这个问题?我必须将几个对象传递给详细视图.但我使用didSelectRowAtIndex-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

rob*_*off 197

如果您使用prepareForSegue:sender:那么如果您以后决定从表视图外的某些控件触发segue,那么您将无需更改.

prepareForSegue:sender:消息被发送到当前视图控制器,所以我建议是这样的:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Assume self.view is the table view
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    DetailObject *detail = [self detailForIndexPath:path];
    [segue.destinationViewController setDetail:detail];
}
Run Code Online (Sandbox Code Playgroud)

在Swift中:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let path = self.tableView.indexPathForSelectedRow()!
    segue.destinationViewController.detail = self.detailForIndexPath(path)
}
Run Code Online (Sandbox Code Playgroud)

  • 不应该'self.view`在这里只是'发送者'吗?我甚至无法使`[self.view indexPathForSelectedRow]`工作,我不得不做`[sender indexPathForSelectedRow];` (4认同)

Roh*_*wal 5

我做到了这一点并且有效

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"Row Selected = %i",indexPath.row);

    [self performSegueWithIdentifier:@"testID" sender:self.view];    
}
Run Code Online (Sandbox Code Playgroud)

  • 这没有意义.您应该使用segue或表视图委托.只需从Cell创建一个segue,它将自动执行您所做的相同操作而无需编写代码. (11认同)
  • 如何在没有didSelectRow的情况下为单元格指定segue? (3认同)