【问题标题】:Master detail ViewController when detailViewController is dynamic当 detailViewController 为动态时,掌握细节 ViewController
【发布时间】:2013-11-03 19:25:15
【问题描述】:
我正在为 iPhone 构建一个应用程序,我想在 XCode 中使用情节提要从 tableView 中进行简单的选择(我们称之为具有几行的主表视图控制器),然后通过导航转到下一页并显示该选择的详细视图。
我在我的代码中有一个代表我的 detailViewController 的基类,并且这个基类有 2-3 个驱动程序类代表我想在第二页中详细显示视图控制器的内容,有人可以告诉我如何设置目标 viewController(detailViewController ) 使用情节提要根据主视图控制器中的选定行动态地添加到我的子类之一?
通常您使用 segue 为您的详细视图控制器在情节提要中为目标类分配一个类,但由于我的目标类可能是不同的(子类),您如何在情节提要中设置它?
谢谢你,
锦
【问题讨论】:
标签:
ios
ios6
uinavigationcontroller
ios7
storyboard
【解决方案1】:
有几种方法可以解决这个问题:
故事板法
-
使用故事板在您的主表视图之间建立关系
控制器和详细视图控制器。在故事板中,你
完全可以有不止一个 segue 从
MasterTableViewController 到各种其他视图控制器。
`- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self performSegueWithIdentifier:@"detail view identifier" sender:self];
}
请务必在故事板中命名您的转场。
代码方法
-
在您的 MasterTableViewController 中:
`- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MyViewController *vc = [[UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"view controller identifier"]];
[self presentViewController:vc 动画:YES 完成^{}];
}
【解决方案2】:
正如您所说,您可以处理 didSelectRowAtIndexPath 方法并从那里实例化您想要的任何视图控制器(或其子类),而不是将 segue 直接连接到故事板中的单元格。
要手动加载基于故事板的 VC,请确保您仍然在界面生成器的故事板中为 VC 提供一个标识符,然后执行以下操作来加载它:
UIStoryboard* storyboard = self.storyboard;
DetailViewController* detailVC = [storyboard instantiateViewControllerWithIdentifier:@ "DetailViewController"];
[self.navigationController pushViewController:detailVC animated:YES];
如果您真的想要不同的 VC 布局,对于不同的子类,您可能希望在情节提要中有不同的 VC。或者设置一个初始化程序,让您根据需要进行设置。