无法使用 UISplitView 在 TableView 上添加 NavigationController

Posted

技术标签:

【中文标题】无法使用 UISplitView 在 TableView 上添加 NavigationController【英文标题】:Can't add NavigationController on TableView using UISplitView 【发布时间】:2013-06-13 10:49:04 【问题描述】:

我在这里遇到了一些困难,如果您认为我的问题对您来说很容易,请原谅我。 我正在尝试使用UISplitView 创建应用程序。左边的第一个视图是TableView,右边的另一个只是普通视图。

这是我在 AppDelegate.m for UISplitView 中的代码。

#import "AppDelegate.h"
#import "MasterViewController.h"
#import "DetailViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:        (NSDictionary *)launchOptions

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

MasterViewController *masterVC = [[MasterViewController alloc]init];
DetailViewController *detailVC = [[DetailViewController alloc]init];
UISplitViewController *splitVC = [[UISplitViewController alloc]init];
[splitVC setViewControllers:[NSArray arrayWithObjects:masterVC,detailVC,nil]];
[self.window setRootViewController:splitVC];

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;

现在,我想在TableView 上添加一个导航栏,如果我使用SplitView,我不知道如何添加,但是当我使用单个TableView 时我可以。

这是我在 AppDelegate.m 中的代码,使用一个使用 TableView 的视图应用程序。 (这是有效的)

#import "AppDelegate.h"
#import "ViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
//create UINavigationController
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
return YES;

希望你能理解我想说的话。我不能发布图片,因为我没有足够的声誉。再次..问题是“如果我使用UISplitView,如何在TableView 中添加导航控制器?” 如果我使用storyboards 而不是使用两个XIB 文件,您认为对我来说会容易吗?希望您能帮助我。

提前致谢!

【问题讨论】:

【参考方案1】:

试试这个代码

AppDelegate.h 文件中

    UINavigationController *detailNavigationController;
    UINavigationController  *masterNavigationController;
    UISplitViewController  *HomeSpilitView;
    HomeSpilitViewController *HomeMster;
    HomeDetailsViewController *HomeDetailsViewControllers;

AppDelegate.m 文件中

     -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        NSMutableArray *array = [NSMutableArray array];

                            HomeSpilitView = [[[UISplitViewController alloc] init]autorelease];

                            HomeMster = [[HomeSpilitViewController alloc] initWithNibName:@"HomeSpilitViewController" bundle:nil];

                            masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:HomeMster] autorelease];
                            HomeMster.title=@"Title home";
                            masterNavigationController.navigationBar.tintColor =[UIColor colorWithRed:255/255.0 green:108/255.0 blue:61/255.0 alpha:0.1];
                            [array addObject:masterNavigationController];


                            HomeDetailsViewController *HomeDetailsViewControllers = [[HomeDetailsViewController alloc] initWithNibName:@"HomeDetailsViewController" bundle:nil];

                            detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:HomeDetailsViewControllers] autorelease];

                            detailNavigationController.navigationBar.tintColor =[UIColor colorWithRed:255/255.0 green:108/255.0 blue:61/255.0 alpha:0.1];
                            HomeDetailsViewControllers.title=@"details title";
                            HomeMster.objHomeDetailsViewcontroller=HomeDetailsViewControllers;
                            HomeSpilitView.delegate = HomeDetailsViewControllers;

                          [array addObject:detailNavigationController];

                          [HomeSpilitView setViewControllers:array];

                          [self.window setRootViewController:HomeSpilitView];
         [self.window makeKeyAndVisible];
         return YES;
    

【讨论】:

我遇到了一些错误。 XCode 似乎无法识别HomeSplitViewController。请解释一下您是如何做到的,您是否在其他文件中的某个地方定义了它?在ViewController.h 也许?

以上是关于无法使用 UISplitView 在 TableView 上添加 NavigationController的主要内容,如果未能解决你的问题,请参考以下文章

在通用 iOS 应用程序中使用 Storyboard 的 UISplitView

UISplitView 方向问题

在 UISplitView 中选择导航后,DetailView 消失

如何对 UISplitView 进行动画切换?

通用应用程序中 UITabBar 内的 UISplitView 未更新详细信息视图

iPad拆分视图,uisplitview中的多个主视图和详细视图