如何在iOS的分割视图中加载不同的视图到详细视图中

11 浏览
0 Comments

如何在iOS的分割视图中加载不同的视图到详细视图中

我想知道如何从根视图加载不同的视图到详细视图中..

   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.row == 0) {
            SecondViewController *svc = [[SecondViewController alloc] init];
            //[self.navigationController pushViewController:svc animated:YES]; 
        }
}

我想知道如何从根视图加载不同的视图到详细视图中。

0
0 Comments

问题的原因:在split视图控制器中成功加载XIB文件作为替代细节视图控制器一直是一个难题,用户尝试了很多不同的方法,但都没有成功。

解决方法:最终,Travis M的答案给了用户一个线索。用户需要删除之前尝试创建的新的XIB文件和UIViewController的子类,然后创建一个新的文件并将其设置为UIViewController的子类,并勾选“同时创建XIB文件”选项。用户不需要修改新的UIViewController子类,除非想要在视图中编写内容。用户只需要在解决方案中添加一个UILabel,并使用Interface Builder完成。确保在代码中引用替代视图控制器NEW_DetailViewController。这样就解决了问题。

文章内容如下:

在iOS的split视图控制器中成功加载不同的视图作为细节视图一直是一个难题。用户曾尝试了很多不同的方法,但都没有成功。最终,用户在Stack Overflow上找到了一个解决方案。

首先,用户需要在当前的细节视图控制器的`viewDidLoad`方法中导入正确的头文件。

#import "NEW_DetailViewController.h"

然后,在`viewDidLoad`方法中,用户需要添加以下代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    <>
    if (<>) {
        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文件。但是,用户希望能够加载XIB文件,因此坚持尝试。

用户尝试了很多不同的方法,但都没有成功。最终,Travis M的答案给了用户一个线索。用户需要删除之前尝试创建的新的XIB文件和UIViewController的子类。

用户需要创建一个新的文件,并将其设置为UIViewController的子类。在创建文件时,用户需要勾选“同时创建XIB文件”的选项。用户不需要修改新的UIViewController子类,除非想要在视图中编写内容。用户只需要在解决方案中添加一个UILabel,并使用Interface Builder完成。

最后,用户需要在代码中引用替代视图控制器NEW_DetailViewController。

这样,用户就成功解决了在split视图控制器中加载不同视图作为细节视图的问题。希望这篇文章能对有类似问题的开发者有所帮助。

0
0 Comments

问题原因:在选择单元格后,主视图控制器没有隐藏。

解决方法:将以下代码添加到上述代码的末尾,以隐藏主视图控制器。

[delegate.splitViewController.viewControllers objectAtIndex:0].splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;

完整的解决方法如下:

- (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];
    
    [delegate.splitViewController.viewControllers objectAtIndex:0].splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
}

这样,当您从表视图选择单元格时,主视图控制器将自动隐藏。

0