1

我想知道如何将不同的视图从 rootview 加载到 detailView 中。

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

        if (indexPath.row == 0) {
            SecondViewController *svc = [[SecondViewController alloc] init];

            //[self.navigationController pushViewController:svc animated:YES]; 

        }


}
4

2 回答 2

4

有一个包含 2 个视图的splitviewcontroller数组,一个是根视图,另一个是详细视图,您可以更改此数组中的视图。如果您分配并初始化一个视图并将其替换为这两个中的任何一个,则此视图将替换splitviewcontroller.

使用此代码为 rootview 的不同单元加载不同的视图。改变rootview的didSelectRowAtIndexPath方法如下:

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

    UIViewController  *localdetailViewController = nil;

    if (indexPath.row==0)
    {

    DetailViewController *detailView=[[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];

    localdetailViewController=detailView;

    detailView=nil;

    }

    if (indexPath.row==1)
    {

    SecondViewController *secondDetailView=[[SecondViewController alloc] initWithNibName:@"SecondDetailViewController" bundle:nil];

    localdetailViewController=secondDetailView;
    secondDetailView = nil;
    }

    UINavigationController *navController=[[UINavigationController alloc] init];

    [navController pushViewController:localdetailViewController animated:YES];

    YourSplitViewAppDelegate *delegate=[[UIApplication sharedApplication] delegate];

    NSArray *viewControllers=[[NSArray alloc] initWithObjects:[delegate.splitViewController.viewControllers objectAtIndex:0],navController,nil];

    delegate.splitViewController.viewControllers = viewControllers;

    [localdetailViewController release];

    [navController release];

    }
于 2012-08-18T08:47:06.883 回答
0

我的解决方案是使用将 Xcode 7.1.1 用于通用应用程序,使用情节提要、自动布局和大小类,为 iOS 9 构建...

我在当前/原始(不是替换/新/第二个)详细视图控制器的方法中使用了Midhun MP答案版本:viewDidLoad

显然首先为您的控制器导入正确的头文件:

#import "NEW_DetailViewController.h"

然后在viewDidLoad方法内:

- (void)viewDidLoad {
    [super viewDidLoad];

    <<OTHER_CODE>>

    if (<<INSERT_THE_LOGIC_YOU_NEED_TO_TRIGGER_THE_REPLACEMENT_DETAIL_VC>>) {
        NEW_DetailViewController *viewNewDetailVC = [[NEW_DetailViewController alloc] initWithNibName:@"NEW_DetailViewController" bundle:nil];

        UINavigationController *navController = [[UINavigationController alloc] init];
        [navController pushViewController:viewNewDetailVC animated:YES];

        NSArray *arraySplitViewControllers = [[NSArray alloc] initWithObjects:[self.splitViewController.viewControllers objectAtIndex:0],navController,nil];

        self.splitViewController.viewControllers = arraySplitViewControllers;
    }
}

注意我可以在不加载 XIB 文件的情况下使此代码工作,在代码中构建整个替换细节 VC,[[UIViewController alloc] init]而不是[[NEW_DetailViewController alloc] initWithNibName:@"NEW_DetailViewController" bundle:nil],但对我无法加载 XIB 文件感到沮丧,所以我坚持...

我尝试了许多不同 SO 答案的多种变体,试图解决成功加载 XIB 文件作为拆分视图控制器中的替换细节视图控制器的问题。

最后,特拉维斯 M的这个回答给了我我需要的提示......

删除您迄今为止为创建新的 XIB 文件和UIViewController!

创建一个新文件并使其成为 UIViewController 的子类。看截图:

新 UIViewController 的新子类截图

重要的是确保您选中“同时创建 XIB 文件”复选框。

您不需要修改 的新子类UIViewController,除非您想对视图的内容进行编码。我只需要UILabel为我的解决方案添加一个,我使用 Interface Builder 完成了这个。

NEW_DetailViewController确保按照我上面的示例在代码中引用替换视图控制器。

而已!

在您的 XIB 文件中,您应该最终得到以下内容:

文件所有者 -> 子类:NEW_DetailViewController

文件所有者 -> 出口:查看

查看 -> 参考出口:查看

于 2015-11-16T14:02:31.033 回答