如何用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章