如何用SplitViewController控件

如何用SplitViewController控件

 
在苹果公司推出iPad以后,基于iPad的大画面,同时提供了在iPhone不支持的多个新的ViewController,其中一个就是SplitViewController。
    
      但是从苹果公司提供资料以及网上的各种信息来看,似乎无法在TabBar中使用SplitViewController,在IB中也只能设置Tab为ViewController或者TableViewController。
    
      网上有很多人讨论这个课题,本人也在开发一个软件时希望某一个Tab中能使用SplitViewController,经过多方研究,终于找到在Tab中实现SplitViewController的方法,在网上介绍后已被国外的开发者采用,请看一个德国开发者的作品http://itunes.apple.com/de/app/jugendsprache-worterbuch-der/id39920639mt=8,现将此法介绍给大家共享。
    
      根据使用者的爱好和编程熟练度可以分成两种做法,其一是以IB为主编程为辅的方法,其二是完全编程方法,下面将介绍前一种方法。
    
      第一步:使用xCode的SplitView模版生成一个新项目并编译保存。
   

  在TabBarController中使用SplitViewController


    
      第二步:再用xCode的TabBar模版作为你的新项目并编译保存,假设项目名为SplitInTabBarAppDelegate
   

  在TabBarController中使用SplitViewController


    
      第三步:在第二步的项目中加一个新Tab
   

  在TabBarController中使用SplitViewController


    
      第四步:把第一步生成的项目中的RootViewController.*, DetailViewController.*等文件复制到第二步的项目中
   

  在TabBarController中使用SplitViewController


    
      第五步:在SplitInTabBarAppDelegate.h中加入下面的代码:
   

   
  #import
    
      @class RootViewController;
    
      @class DetailViewController;
    
      @interface SplitInTabBarAppDelegate : NSObject {
    
      UIWindow 
* window;
    
      UITabBarController 
* tabBarController;
    
      UISplitViewController 
* splitViewController;
    
      RootViewController 
* rootViewController;
    
      DetailViewController 
* detailViewController;
    
      }
    
      @
property  (nonatomic, retain) IBOutlet UIWindow  * window;
    
      @
property  (nonatomic, retain) IBOutlet UITabBarController  * tabBarController;
    
      @
property  (nonatomic, retain) IBOutlet UISplitViewController  * splitViewController;
    
      @
property  (nonatomic, retain) IBOutlet RootViewController  * rootViewController;
    
      @
property  (nonatomic, retain) IBOutlet DetailViewController  * detailViewController;
    
      @
end
    
      第六步:在SplitInTabBarAppDelegate.m中加入下面的代码
    
      #import 
" SplitInTabBarAppDelegate.h "
    
      #import 
" RootViewController.h "
    
      #import 
" DetailViewController.h "
    
      @implementation SplitInTabBarAppDelegate
    
      @synthesize window;
    
      @synthesize tabBarController;
    
      @synthesize splitViewController;
    
      @synthesize rootViewController;
    
      @synthesize detailViewController;
    
      #pragma mark 
-
    
      #pragma mark Application lifecycle
    
      
- (void) makeSplitViewController {
    
      NSMutableArray 
* controllers  =  [NSMutableArray arrayWithArray:tabBarController.viewControllers];
    
      
int  index  =   0 ;
    
      
for  (UIViewController  * controller in tabBarController.viewControllers) {
    
      
if  (index  ==   2 ) {
    
      detailViewController 
=  [[DetailViewController alloc] initWithNibName:@ " DetailView "  bundle:nil];
    
      rootViewController 
=  [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
    
      rootViewController.detailViewController 
=  detailViewController;
    
      rootViewController.navigationItem.title 
=  @ " List " ;
    
      UINavigationController 
* nav  =  [[[UINavigationController alloc] initWithRootViewController:rootViewController] autorelease];
    
      splitViewController 
=  [[UISplitViewController alloc] init];
    
      splitViewController.tabBarItem 
=  controller.tabBarItem;
    
      splitViewController.viewControllers 
=  [NSArray arrayWithObjects:nav, detailViewController, nil];
    
      splitViewController.delegate 
=  detailViewController;
    
      [controllers replaceObjectAtIndex:index withObject:splitViewController];
    
      }
    
      index
++ ;
    
      }
    
      tabBarController.viewControllers 
=  controllers;
    
      }
    
      
-  (BOOL)application:(UIApplication  * )application didFinishLaunchingWithOptions:(NSDictionary * )launchOptions {
    
      
//  Override point  for  customization after app launch.
    
      [self makeSplitViewController];
    
      
//  Add the tab bar controller ' s current view as a subview of the window
    

      [window addSubview:tabBarController.view];
    
      [window makeKeyAndVisible];
    
      return YES;
    
      }
    
      
-  (void)splitViewController: (UISplitViewController * )svc willHideViewController:(UIViewController * )aViewController withBarButtonItem:(UIBarButtonItem * )barButtonItem forPopoverController: (UIPopoverController * )pc {
    
      UIBarButtonItem 
* first  =  nil;
    
      
if  (toolbar.items.count  >   0 ) {
    
      first 
=  [toolbar.items objectAtIndex: 0 ];
    
      }
    
      
if  (![first.title isEqual:barButtonItem.title]) {
    
      barButtonItem.title 
=  @ " Root List " ;
    
      NSMutableArray 
* items  =  [[toolbar items] mutableCopy];
    
      [items insertObject:barButtonItem atIndex:
0 ];
    
      [toolbar setItems:items animated:YES];
    
      [items release];
    
      self.popoverController 
=  pc;
    
      }
    
      }
    
   

   

      第七步:现在编译第二步的项目就会看到下面的结果。
   

  在TabBarController中使用SplitViewController


   

  在TabBarController中使用SplitViewController

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值