Kru*_*lur 11 cocoa-touch objective-c ipad
在我UISplitViewController的主控制器是一个UINavigationController.在纵向模式下,只要用户向上导航(使用后退按钮),我想保持导航控制器可见.一旦选择了导航控制器的表视图中的项目,我想解除弹出窗口.我怎样才能做到这一点?我UITableViewController怎么知道它是否在一个弹出窗口内,如果是,则解雇自己?
mke*_*ley 20
使主视图控制器UISplitViewControllerDelegate(如果它还没有)并将其连接到UISplitViewController的delegate插座.
UIPopoverController在主视图控制器中创建一个变量:
// MyViewController.h
@interface MyViewController : UIViewController <UISplitViewControllerDelegate> {
UIPopoverController *popoverController;
}
@property (retain, nonatomic) UIPopoverController *popoverController;
// MyViewController.m
@synthesize popoverController;
Run Code Online (Sandbox Code Playgroud)
实现以下UISplitViewControllerDelegate方法:
// Called when rotating to portrait
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc {
// Popover controller is visible in portrait
self.popoverController = pc;
}
// Called when rotating to landscape
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
// No popover controller in landscape view
self.popoverController = nil;
}
Run Code Online (Sandbox Code Playgroud)
在主视图控制器中的自己的处理程序中(在表视图中选择导航项时调用的处理程序):
- (void)navigationControllerSelectedItem:(id)item {
// If a popover controller is visible, hide it
if (popoverController) {
[popoverController dismissPopoverAnimated:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记发布该变量:
- (void)dealloc {
self.popoverController = nil;
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!