当detailViewController是动态的时,掌握细节ViewController

时间:2013-10-24 21:23:00

标签: ios ios6 uinavigationcontroller ios7 storyboard

我正在为iPhone构建一个应用程序,我想在XCode中使用storyboard从tableView中进行简单的选择(让我们称之为主表行视图控制器,然后通过导航它转到下一页并显示一个该选择的详细视图。 我在我的代码中有一个代表我的detailViewController的基类,并且有这个基类的2-3个驱动程序类代表我想要在第二页中详细查看控制器的内容,有人能给我一个如何设置目标viewController的想法(detailViewController) )动态到我的一个子类,基于主视图控制器中使用故事板的选定行?

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

谢谢你, 鉴

2 个答案:

答案 0 :(得分:0)

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

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

UIStoryboard* storyboard = self.storyboard;

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

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

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

答案 1 :(得分:0)

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

故事板方法

  • 使用故事板在主表视图之间建立关系 控制器和详细视图控制器。在故事板中,你 可以完全拥有一个以上的segue MasterTableViewController到各种其他视图控制器。

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

    [self performSegueWithIdentifier:@“详细视图标识符”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 animated:YES completion ^ {}];

    }