我正在开发的应用程序不需要仅在选择Master窗口中的不同tableView项目时更改图像或标签(仅使用一个detailViewController),而是更改整个外观(每个项目的不同xib文件)所以所有教程发现这里没有帮助。
谁能告诉我是否可以将detailViewController的初始视图切换为我创建的视图?
更新
我设法解决了这个问题。具有故事板的Master-Detail模板按顺序创建MasterViewController和DetailViewController的数组,因此如果要更改详细视图,则必须使用didSelectRowAtIndexPath
中的MasterViewController
方法更新该数组,如下所示:< / p>
switch (indexPath.row) {
case 0:
{
NSArray *newVCs = [NSArray arrayWithObjects: [self.splitViewController.viewControllers objectAtIndex:0], viewArray[0], nil];
self.splitViewController.viewControllers = newVCs;
break;
}
case 1:
{
NSArray *newVCs = [NSArray arrayWithObjects:[self.splitViewController.viewControllers objectAtIndex:0], viewArray[1], nil];
self.splitViewController.viewControllers = newVCs;
break;
}
//etc
default:
break;
我也创建了一系列视图:
FirstDetailViewController *DVCA = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailViewController" bundle:[NSBundle mainBundle]];
SecondDetailViewController *DVCB = [[SecondDetailViewController alloc] initWithNibName:@"SecondDetailViewController" bundle:[NSBundle mainBundle]];
//etc
//Create Array of views
viewArray = [NSArray arrayWithObjects:DVCA, DVCB, nil];
更新2
还有另一种方法可以将详细视图切换到另一个视图。在故事板中,您可以添加新的View Controller并将Identity Inspector中的Storyboard ID
设置为viewControllerClass的名称,需要将segue设置为replace,并且他的Identifier
需要与viewControllerClass相同。之后didSelectRowAtIndexPath
应如下所示:
NSMutableArray* arr = [[NSMutableArray alloc] initWithArray:self.splitViewController.viewControllers];
switch (indexPath.row) {
case 1:
{
FirstDetailViewController *loginVC = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstDetailViewController"];
[arr replaceObjectAtIndex:1 withObject:loginVC];
self.splitViewController.viewControllers = arr;
break;
}
//etc...
default:
break;
}
答案 0 :(得分:2)
在主视图控制器中查找didSelectRowAtIndexPath方法。点击表格视图单元格时会调用它。您将获得indexPath。您可以将其与您的数据源链接,并告诉它实例化哪个ViewController&amp;推。
像 -
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *detailViewController;
switch (indexPath.row) {
case 0:
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController1.xib" bundle:[NSBundle mainBundle]];
break;
case 1:
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController2.xib" bundle:[NSBundle mainBundle]];
break;
case 2:
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController3.xib" bundle:[NSBundle mainBundle]];
break;
//etc
default:
break;
}
[self.navigationController pushViewController:detailViewController animated:YES];
}
答案 1 :(得分:0)
只需在故事板中创建几个xib,所有这些都使用相同的控制器,并且不同的原型单元指向其中的每一个,这样您只需要很少的编码就能为每一行选择正确的原型单元。