对于 iPad 开发来说,因为屏幕大,为了用户操作的方便,所以通常使用 UISplitViewController
来实现导航。
同时也会使用UIPopoverPresentationController
实现浮窗功能。
效果图
代码示例:
设置根视图控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//
SpliteViewController *splitViewController = [[SpliteViewController alloc] init];
self.window.rootViewController = splitViewController;
//
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
SpliteViewController
视图控制器继承UISplitViewController
,并设置为app的根视图控制器。
#import <UIKit/UIKit.h>
@interface SpliteViewController : UISplitViewController
@end
#import "SpliteViewController.h"
#import "MainViewController.h"
#import "BeiChiViewController.h"
#import "CRVViewController.h"
#import "XianDaiViewController.h"
#import "LeiKeSaSiViewController.h"
@interface SpliteViewController () <UISplitViewControllerDelegate>
@end
@implementation SpliteViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setSpliteController];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)setSpliteController
{
//
CGFloat originXY = 180.0f;
//
MainViewController *menuVC = [[MainViewController alloc] init];
UINavigationController *menuNav = [[UINavigationController alloc] initWithRootViewController:menuVC];
BeiChiViewController *beiChiVC = [[BeiChiViewController alloc] init];
UINavigationController *BeiChiNav = [[UINavigationController alloc] initWithRootViewController:beiChiVC];
CRVViewController *crvVC = [[CRVViewController alloc] init];
UINavigationController *crvNav = [[UINavigationController alloc] initWithRootViewController:crvVC];
XianDaiViewController *xianDaiVC = [[XianDaiViewController alloc] init];
UINavigationController *xianDaiNav = [[UINavigationController alloc] initWithRootViewController:xianDaiVC];
LeiKeSaSiViewController *leiKeSaSiVC = [[LeiKeSaSiViewController alloc] init];
UINavigationController *leiKeSaSiNav = [[UINavigationController alloc] initWithRootViewController:leiKeSaSiVC];
//
self.delegate = self;
self.minimumPrimaryColumnWidth = originXY;
self.maximumPrimaryColumnWidth = originXY;
self.view.backgroundColor = [UIColor orangeColor];
/*
UISplitViewControllerDisplayModeAutomatic,
UISplitViewControllerDisplayModePrimaryHidden,
UISplitViewControllerDisplayModeAllVisible,
UISplitViewControllerDisplayModePrimaryOverlay,
*/
self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
//
SpliteViewController __weak *weakSelf = self;
menuVC.itemClick = ^(NSInteger index) {
UINavigationController *nextController = controllers[index + 1];
[weakSelf showDetailViewController:nextController sender:nil];
};
}
@end
UIPopoverPresentationController
浮窗的使用
- (void)itemClick
{
// 1 设置内容控制器
MenuViewController *controller = [[MenuViewController alloc] init];
controller.preferredContentSize = CGSizeMake(200, 200);
controller.modalPresentationStyle = UIModalPresentationPopover;
// 2 出现
// 2-1 出现在UIBarButtonItem上面的
UIPopoverPresentationController *popController = [controller popoverPresentationController];
popController.barButtonItem = self.navigationItem.rightBarButtonItem;
// 3 显示
[self presentViewController:controller animated:YES completion:nil];
// 4
controller.itemClick = ^(NSInteger index) {
// 5 消失
[self dismissViewControllerAnimated:YES completion:NULL];
// 6
MenuViewController *nextVC = [MenuViewController new];
[self.navigationController pushViewController:nextVC animated:YES];
};
}