【问题标题】:When showing a view controller in a UINavigation setup from a table cell accessory, how do I know which table cell it came from?从表格单元格附件的 UINavigation 设置中显示视图控制器时,我如何知道它来自哪个表格单元格?
【发布时间】:2019-04-27 17:28:17
【问题描述】:
我有一个导航控制器(其中包括)一个视图控制器,其中包含一个UITableView 和一个基本的UITableViewCell。 UITableViewCell 具有附件的披露指示器。此表包含用户的联系人。
我创建了一个新的视图控制器“查看联系人”,它允许您查看联系人的详细信息。我右键单击并从原型单元格中的显示指示器(虽然我觉得它是从整个表格单元格中)拖动到新的视图控制器并选择“显示”。
这一切都有效,当我运行它时,我可以点击联系人并导航到查看联系人页面。问题是,我不知道如何分辨是哪个单元格让我知道要显示哪个联系人的详细信息!
【问题讨论】:
标签:
ios
objective-c
uitableview
uinavigationcontroller
【解决方案1】:
主要有两种方法。
你选择了一种方式,“segue”方式。另一种方法是通过编程方式进行并听取 TableViewDelegate 方法。
Segue Way
您需要您的TableViewController 在按下单元格时将数据传递给ViewContactViewController。因为你使用了segue,所以你需要按住ViewContactViewController,它才会出现在屏幕上。
输入prepareForSegue:sender:method。
在此方法中,获取视图控制器,并将所需的数据传递给它。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"showContact"]) {
ViewContactViewController *contactViewController = [segue destinationViewController]; // get hold of destination VC
contactViewController.contact = [self.contacts objectAtIndex:[self.tableView indexPathForSelectedRow].row]; // use indexPathForSelectedRow to get hold of the indexpath of selected Cell. The data can be retrieved from the datasource array and passed on
}
}
上述代码中的假设:
1. showContact 定义为show segue的名称。
2. ViewContactViewController 有一个公共属性,contact。
3.self.contacts是tableview数据源方法中使用的联系人数据数组。