AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]]; self.window.rootViewController =nav; [self.window makeKeyAndVisible]; return YES;}
ViewController.m
#import "ViewController.h"#import "View2Controller.h"@interface ViewController ()<UipopoverControllerDelegate>@PRoperty (nonatomic,strong) UIPopoverController *popoverButtonItem;@property (nonatomic,strong) UIPopoverController *popoverButton;@end@implementation ViewController //popoverButtonItem懶加載-(UIPopoverController *) popoverButtonItem{ if (!_popoverButtonItem) { UINavigationController *nav= [[UINavigationController alloc]initWithRootViewController: [[View2Controller alloc]init]]; _popoverButtonItem= [[UIPopoverController alloc] initWithContentViewController:nav]; _popoverButtonItem.delegate = self; } return _popoverButtonItem;} //popoverButton懶加載-(UIPopoverController *) popoverButton{ if (!_popoverButton) { _popoverButton= [[UIPopoverController alloc] initWithContentViewController:[[View2Controller alloc]init]]; _popoverButton.delegate = self; } return _popoverButton;} //1. 從BarButtonItem點擊彈出-(void) touchButtonItem:(UIBarButtonItem *)btn { /** * 從BarButtonItem上點擊 * @param item:圍繞著哪個UIBarButtonItem顯示 * @param permittedArrowDirections:箭頭指的方向 * @param animated:動畫 */ [self.popoverButtonItem presentPopoverFromBarButtonItem:btn permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];}//2從界面上的某個按鈕或者某片區域彈出popOver,排除navigationBar或者TabBar上的點擊-(void) touchButton:(UIButton *)btn { /** * 從界面上的某個按鈕或者某片區域彈出popOver * @param presentPopoverFromRect: 指定箭頭所指區域的矩形框范圍(位置和尺寸) * @param inView: rect參數是以view的左上角為坐標原點(0,0) * @param permittedArrowDirections:箭頭指的方向 * @param animated:動畫 */ [self.popoverButton presentPopoverFromRect:btn.bounds inView:btn permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];}- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor grayColor]; self.navigationItem.title = @"導航欄"; self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc]initWithTitle:@"點我" style:UIBarButtonItemStyleDone target:self action:@selector(touchButtonItem:)]; //******************************************************************************** UIButton *btn =[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 50)]; [btn setTitle:@"點我啊" forState:UIControlStateNormal]; [btn setTintColor:[UIColor blueColor]]; [btn setBackgroundColor:[UIColor redColor]]; [btn addTarget:self action:@selector(touchButton:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn];}// UIPopoverControllerDelegate --在ARC環境下正確的做法是保持popover的生命周期。讓popover是strong類型的成員變量或屬性。 當收到UIPopoverController dismiss的消息的時候將popover=nil;這樣就可以正常便用了。- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController{ self.popoverButton = nil; self.popoverButtonItem = nil;}
View2Controller.m
- (void)viewDidLoad{ [super viewDidLoad]; // 設置控制器在popover中顯示的尺寸 跟 view 一樣 self.preferredContentSize = self.view.frame.size;}
新聞熱點
疑難解答