0

我正在为 iPhone 构建一个应用程序,我想在 XCode 中使用情节提要从 tableView 中进行简单的选择(我们称之为具有几行的主表视图控制器),然后通过导航转到下一页并显示详细视图那个选择。我在我的代码中有一个代表我的 detailViewController 的基类,并且这个基类有 2-3 个驱动程序类代表我想在第二页中详细显示视图控制器的内容,有人可以告诉我如何设置目标 viewController(detailViewController ) 根据使用情节提要的主视图控制器中的选定行动态到我的子类之一?

通常,您使用 segue 为您的详细视图控制器在情节提要中为目标类分配一个类,但由于我的目标类可能是不同的(子类),您如何在情节提要中设置它?

谢谢你,卡姆

4

2 回答 2

0

正如您所说,您可以处理 didSelectRowAtIndexPath 方法并从那里实例化您想要的任何视图控制器(或其子类),而不是将 segue 直接连接到故事板中的单元格。

要手动加载基于故事板的 VC,请确保您仍然在界面生成器的故事板中为 VC 提供标识符,然后执行以下操作来加载它:

UIStoryboard* storyboard = self.storyboard;

DetailViewController* detailVC = [storyboard instantiateViewControllerWithIdentifier:@ "DetailViewController"];

[self.navigationController pushViewController:detailVC animated:YES];

如果您真的想要不同的 VC 布局,对于您的不同子类,您可能希望在故事板中有不同的 VC。或者设置一个初始化程序,让您根据需要设置它。

于 2013-10-24T22:06:13.483 回答
0

有几种方法可以解决这个问题:

故事板方法

  • 使用情节提要在主表视图控制器和详细视图控制器之间建立关系。在情节提要中,您完全可以有多个从 MasterTableViewController 到各种其他视图控制器的 segue。

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

    [self performSegueWithIdentifier:@"detail view identifier" sender:self];

    }

  • 一定要在故事板中命名你的 segues。

代码方法

  1. 在您的 MasterTableViewController 内部:

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

    MyViewController *vc = [[UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"view controller identifier"]];

    [self presentViewController:vc 动画:YES 完成^{}];

    }

于 2013-10-24T22:13:01.503 回答