在我的TableViewController.m中,我可以通过[tableView indexPathForSelectedRow]轻松获取所选行,但我想从 DIFFERENT 视图中获取此值。所以当我的TableViewController转到我的DetailViewController时。我希望我的DetailViewController具有所选单元格的数据。
答案 0 :(得分:0)
在适当的架构中,Controller的设计使其成为其他控制器的黑盒子。在您的示例中,Details控制器搜索TableViewController的选定项目并不是一个很好的做法。相反,您的TableViewController应该使用DetailViewController作为“服务”,并以某种方式将所选对象作为参数传递,或将其设置为“服务提供者”(DetailController)的属性。 例如
// this is still the TavleViewController's code
id selectedObject = // ... get selected object somehow... indexPathForSelectedRow or whatever
DetailViewController *newView = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[newView showDetails:selectedObject];
这里,函数showDetails只是一个例子,它是你实现的一个函数,用于将选择的对象作为参数传递。
编辑: 你如何做到这取决于你的模型。在模型中使用每个对象代表一个人。您的MainTableView有一个名称列表,detailView显示有关所选Person的详细信息。在这种情况下,这是典型的,你将有一个代表Person的类,而人员列表将在数组中的某个位置。所以......
NSIndexPath *i = [tableView indexPathForSelectedRow];
Person *selectedPerson = [self.myArrayOfPersons objectAtIndex:i.row];
// here you instantiate or show the details view
[detailsView showDetails:selectedPerson]; // this is one option, you could also use a property
// for example
detailsView.selectedPerson = selectedPerson; // this is an alternative to the showDetails,
在DetailsViewController中你可以有这样的东西
- (void)showDetails:(Person *)person
{
// just fill your controls witht the person's information: age, birth place, address...
[self.someTextView setText:person.name]
}