ios - 将数据从 UITableViewCell 推送到 ViewController

标签 ios objective-c xcode uitableview segue

我正在尝试将数据从 UITableViewCell 推送到另一个 View Controller 。我尝试了两种不同的方法,instantiateViewControllerWithIdentifierPrepareForSegue。在这两种情况下,ViewController 都正确加载,但数据未被传递(null 或第一个数组值)。

这是我的 instantiateViewControllerWithIdentifier 方法,当我在 ViewController 中记录变量时,它只返回 null。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *testNumber = [jobNumberArray objectAtIndex:indexPath.row];
NSLog(@"Job is... %@",testNumber);
StandardInfoViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"StandardInfoViewController"];
controller.JobNr = [jobNumberArray objectAtIndex:indexPath.row];
[self.navigationController pushViewController:controller animated:YES];
} 

准备继续

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   [self performSegueWithIdentifier:@"Details" sender: self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"Details"]){
    StandardInfoViewController *controller = (StandardInfoViewController *)segue.destinationViewController;
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    controller.jobNumber = [jobNumberArray objectAtIndex:indexPath.row];
}
}

当我使用 prepareForSegue 调用时,我得到了数组的第一行,我理解这是因为它不知道单元格,但我不知道如何在 prepareForSegue 调用中识别单元格。

我希望这是有道理的,我们将不胜感激任何帮助或指点。

谢谢

最佳答案

如果您从 Storyboard 中的 tableView-cell 中拖动 segue,您将获得单元格本身作为参数发送者。

然后您可以使用 tableView indexPathForCell:sender 获取所选单元格的实际索引。然后只需正常获取您的对象即可。

即你将不需要实现didSelectRowAtIndexPath


如果您仍想使用 didSelectRowAtIndexPath,只需手动将单元格作为 sender 参数传递即可。即:

 [self performSegueWithIdentifier:@"Details" 
                      sender:[self.tableView cellForRowAtIndexPath:indexPath]]

尽管根据您的代码判断,带有 instansiateViewController 的第一个版本应该可以工作。


另一种模式是对单元格本身进行子类化,并让它们拥有一个属性,即它们要显示的对象。然后您可以直接从单元格中获取对象,而无需调用数据数组本身。

关于ios - 将数据从 UITableViewCell 推送到 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25400316/

相关文章:

ios - 无法从服务器获取响应

ios - 我可以以编程方式在 Assets 目录之间切换吗?

ios - 隐藏按钮上的状态栏点击 Swift 3/iOS 10

ios - Swift 中automaticAdjustsScrollViewInsets 结果存储在哪里?

iphone - 使用我的邮件帐户以编程方式撰写电子邮件,无需在 iPhone 的邮件客户端中进行配置

objective-c - 从 iPhone 向 Mac 发送消息

ios - iOS鼓音序器-缓冲区问题(错误访问)

c - (const char *restrict, ...) 是什么意思?

c++ - 找不到 Xcode 版本 6.0.1 gmp.h 头文件,即使 gmp.h 和 gmpxx.h 位于 local/include

ios - Xcode 4.6 在使用 LLDB 调试器时卡在 "Attaching to..."