在master / detail tableView项目中选择不同的xib文件选择iOS

时间:2013-11-20 15:12:10

标签: ios objective-c uitableview master-detail

我正在开发的应用程序不需要仅在选择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;
}

2 个答案:

答案 0 :(得分:2)

在主视图控制器中查找d​​idSelectRowAtIndexPath方法。点击表格视图单元格时会调用它。您将获得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,所有这些都使用相同的控制器,并且不同的原型单元指向其中的每一个,这样您只需要很少的编码就能为每一行选择正确的原型单元。