zoukankan      html  css  js  c++  java
  • 如何用SplitViewController控件

    IT168技术】在苹果公司推出iPad以后,基于iPad的大画面,同时提供了在iPhone不支持的多个新的ViewController,其中一个就是SplitViewController。

      但是从苹果公司提供资料以及网上的各种信息来看,似乎无法在TabBar中使用SplitViewController,在IB中也只能设置Tab为ViewController或者TableViewController。

      网上有很多人讨论这个课题,本人也在开发一个软件时希望某一个Tab中能使用SplitViewController,经过多方研究,终于找到在Tab中实现SplitViewController的方法,在网上介绍后已被国外的开发者采用,请看一个德国开发者的作品http://itunes.apple.com/de/app/jugendsprache-worterbuch-der/id399206394?mt=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

  • 相关阅读:
    在Spring中使用cache(EhCache的对象缓存和页面缓存)
    halcon 模板匹配 -- 转化 vector_angle_to_rigid
    halcon 模板匹配 -- find_shape_model
    halcon 模板匹配 -- create_shape_model
    C#快速获取指定网页源码的几种方式,并通过字符串截取函数 或 正则 取指定内容(IP)
    C# Socket通讯 本机多网卡,指定网卡通讯
    C# 获取所有网卡信息
    C#关闭退出线程的几种方法
    C#多线程方法 可传参
    C# Datetime 使用详解
  • 原文地址:https://www.cnblogs.com/zhwl/p/2846053.html
Copyright © 2011-2022 走看看