【问题标题】:How do I create a UISplitView manually?如何手动创建 UISplitView?
【发布时间】:2011-02-20 17:48:12
【问题描述】:

我有一个应用程序将导航到 UISplitView(完全在另一个视图中),如下所示:

- (void) switchToMyDayView {
    NSLog(@"Show My Day Screen");

    if (self.myDayController.view.superview == nil) {
        if (self.myDayController == nil) {
            MyDayController *myController = [[MyDayController alloc] initWithNibName:@"MyDay" bundle:nil];
            self.myDayController = myController;
            [myController release];
        }

        [homeScreenController.view removeFromSuperview];
        [self.view insertSubview:self.myDayController.view atIndex:0];
    }
}

在主导航屏幕上完成

现在,MyDayController 有一个名为 MyDay.xib 的 XIB,其中包含以下项目:

文件的所有者:MyDayController

第一响应者:UIResponder

拆分视图控制器

 ---->Navigation Controller

         ---->Navigation Bar

         ----> Table View Controller

                 ----> Navigation Item

 ---->View Controller

那么,我需要更多的组件,我需要一个 UITableViewController 和一个 UISplitViewControllerDelegate 对吗?

我打算在 MyDayController 中实现这些协议,这是标准吗?

所以,在上面的代码之后,我得到一个错误:

-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“MyDay”笔尖,但未设置视图出口。

那么,如何使用 UISplitViewController 修复它?我知道 UISplitViewController 有一个视图属性,但我不能使用它/在 IB 中连接它可以吗?

非常感谢

标记

【问题讨论】:

    标签: objective-c cocoa-touch ipad uisplitviewcontroller


    【解决方案1】:

    你不应该继承 UISplitViewController。您的“MyDayController”类中有什么行为? UISplitViewController 基本上只是为您处理布局主视图和详细视图,因此您的责任是实现这些控制器。

    如果拆分视图位于应用的顶层,您可以将其添加到应用的主窗口 nib。如果不是,只需以编程方式创建它:

    - (void) switchToMyDayView {
        NSLog(@"Show My Day Screen");
    
        if (self.myDayController == nil) {
            YourMasterViewController *masterViewController = [[YourMasterViewController alloc] initWithNibName:@"MasterView" bundle:nil];
            YourDetailViewController *detailViewController = [[YourDetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
            UISplitViewController *myController = [[UISplitViewController alloc] init;
            myController.viewControllers = [NSArray arrayWithObjects:masterViewController, detailViewController, nil];
            [masterViewController release];
            [detailViewController release];
    
            self.myDayController = myController;
            [myController release];         
        }
    
        [homeScreenController.view removeFromSuperview];
        [self.view insertSubview:self.myDayController.view atIndex:0];
    }
    

    您也不需要对 self.myDayController.view.superview == nil 进行测试,因为它隐含在 self.myDayController == nil

    【讨论】:

      【解决方案2】:

      谢谢克里斯托弗·皮克斯莱。 这个解决方案对我有用,但我必须修复你给的东西。 请在下面查看我的代码。

      委托文件

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
      
          LeftViewController *leftViewController = [[LeftViewController alloc] init];// initWithNibName:@"LeftViewController" bundle:nil];
          RightViewController *rightViewController = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil];
          UISplitViewController *myController = [[UISplitViewController alloc] init];
          myController.viewControllers = [NSArray arrayWithObjects:leftViewController, rightViewController, nil];
      
          self.window.rootViewController = myController;
      
          [self.window makeKeyAndVisible];
          return YES;
      }
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        如果你想在 master 和 detail 中创建导航控制器,那么你可以这样做

        self.rootViewController=[[RootViewController alloc]init];
            self.detailViewController=[[FirstDetailViewController alloc]init];
        
            UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController];
            UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController];
        
            self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil];
            self.splitViewController.delegate=self.detailViewController;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-02
          • 1970-01-01
          • 1970-01-01
          • 2014-05-21
          • 2012-11-10
          • 2013-03-07
          • 2020-04-13
          相关资源
          最近更新 更多