iphone:UISplitView
?UINavigationController?*nc = [self.splitViewController.viewControllers ?lastObject];
? ??self.detailViewController?= (SplitViewDetailViewController?*)[nc?topViewController];
有一個splitViewController屬性,其viewControllers為一個含兩個ViewController的數組,0-left,1-right in landscape
?
?
看文檔:https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UISplitViewController_class/Reference/Reference.html#//apple_ref/doc/uid/TP40009277
The array in this property must contain exactly two view controllers. The view controllers are presented left-to-right in the split view interface when it is in a landscape orientation. Thus, the view controller at index 0 is displayed on the left side and the view controller at index 1 is displayed on the right side of the interface.
The first view controller in this array is typically hidden when the device is in a portrait orientation. Assign a delegate object to the receiver if you want to coordinate the display of this view controller using a popover.
?
創建過程:
在StoryBoard中讓Master Detail都Embed in navi..
然后先在AppDelegate的
didFinishLaunchingWithOptions中添加代碼,使得splitView的delegate為DetailViewController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;UINavigationController *navigationController = [splitViewController.viewControllers lastObject];splitViewController.delegate = (id)navigationController.topViewController;return YES; }在MasterVC中取得DetailVC
?
@property?(strong,?nonatomic)?DetailViewController?*detailViewController;
viewDidLoad:
? ??UINavigationController?*nc = [self.splitViewController.viewControllers ?lastObject];
? ??self.detailViewController?= (DetailViewController?*)[nc?topViewController];
?
self.detailViewController.detailItem?= ?xxxx;
?
在DetailVC中,當然要遵循<UISplitViewControllerDelegate>
?
@property?(strong,?nonatomic)?id?detailItem;//in .h
@property?(strong, nonatomic)?UIPopoverController?*masterPopoverController;//in .m
?
- (void)setDetailItem:(id)newDetailItem { ? ? ? ?
? ??// Update the view.??
}
#pragma mark - Split view- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController {barButtonItem.title = @"列表";[self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];self.masterPopoverController = popoverController; }- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {// Called when the view is shown again in the split view, invalidating the button and popover controller. [self.navigationItem setLeftBarButtonItem:nil animated:YES];self.masterPopoverController = nil; }?
? ? 若DetailVC不止是一個ViewController,我們可以使MasterVC遵循<UISplitViewControllerDelegate>,實現其委托方法;讓DetailVC遵循自定義的協議,其功能是使在land和port時隱藏\顯示 調出popover的barItem
?
然后在tableView:didSelectRowAtIndexPath: 中實例化相應的DetailVC,
? ??UIStoryboard?*storyboard = [UIStoryboard?storyboardWithName:@"Storyboard"?bundle:nil];
? ??FirstDetailViewController *newDetailViewController = [storyboard instantiateViewControllerWithIdentifier:@"v1"];
? ? detailViewController = newDetailViewController;
?當然也可以通過StoryBoard中的Segue代替實現實例化功能
?
本文轉自老Zhan博客園博客,原文鏈接:http://www.cnblogs.com/mybkn/archive/2012/05/12/2497266.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的iphone:UISplitView的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Open***+AD+Google au
- 下一篇: zabbix自动发现