如何在iOS的分割视图中加载不同的视图到详细视图中
如何在iOS的分割视图中加载不同的视图到详细视图中
我想知道如何从根视图加载不同的视图到详细视图中..
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == 0) { SecondViewController *svc = [[SecondViewController alloc] init]; //[self.navigationController pushViewController:svc animated:YES]; } }
我想知道如何从根视图加载不同的视图到详细视图中。
问题的原因:在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视图控制器中加载不同视图作为细节视图的问题。希望这篇文章能对有类似问题的开发者有所帮助。
问题原因:在选择单元格后,主视图控制器没有隐藏。
解决方法:将以下代码添加到上述代码的末尾,以隐藏主视图控制器。
[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; }
这样,当您从表视图选择单元格时,主视图控制器将自动隐藏。