2011-10-14 37 views
1

最近我對製作popover屏幕感興趣。在我的導航欄中,我做了這個按鈕,當我點擊它時,它應該會彈出一個彈出窗口。 所以我開始尋找一個有用的教程,但我發現大部分使用界面構建器製作的教程,這不是我想要的。所以我開始嘗試自己做。UIPopOverScreen麻煩

這是我的結果:

首先,我設置了必要的屬性在MainVC.h 還介意

#import <UIKit/UIKit.h> 
#import "ThePopOverVC.h" 

@interface PopoverPrototypeViewController : UIViewController <UIPopoverControllerDelegate> 
{ 
    ThePopOverVC *popover; 
    UIPopoverController *popoverController; 
    UIButton *popoverButton; 
} 

@property (nonatomic,retain) ThePopOverVC *popover; 
@property (nonatomic,retain) UIPopoverController *popoverController; 
@property (nonatomic,retain) UIButton *popoverButton; 

- (void)popoverActivation; 

@end 

然後,我建立了我的觀點在MainVC.m 它準備按下按鈕時查看彈幕屏幕。

#import "PopoverPrototypeViewController.h" 

@implementation PopoverPrototypeViewController 

@synthesize popover; 
@synthesize popoverController; 
@synthesize popoverButton; 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)loadView 
{ 
    [super loadView]; 

    self.view.backgroundColor = [UIColor blueColor]; 

    popover = [[ThePopOverVC alloc] init]; 
    popoverController = [[UIPopoverController alloc] initWithContentViewController:popover]; 
    popoverController.popoverContentSize = CGSizeMake(300, 300); 
    popoverController.delegate = self; 

    self.popoverButton = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 400, 100)]; 
    self.popoverButton.backgroundColor = [UIColor lightGrayColor]; 
    [self.popoverButton setTitle:@"Click me!" forState:UIControlStateNormal]; 
    [self.popoverButton addTarget:self action:@selector(popoverActivation) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:self.popoverButton]; 


} 

- (void)popoverActivation 
{ 
    if ([self.popoverController isPopoverVisible]) { 

     [self.popoverController dismissPopoverAnimated:YES]; 

    } else { 

     UIBarButtonItem *settingsBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.popoverButton]; 
     [self.popoverController presentPopoverFromBarButtonItem:settingsBarButton permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

    } 
} 

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController 
{ 
    return YES; 
} 

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    NSLog(@"something"); 
} 

好的,應該設置MainVC,現在是時候顯示popoverContentViewController了。 對於我的實驗,我只是希望它只是一個不同的backgroundColor空視圖。

所以popoverVC.h是空的:

#import <UIKit/UIKit.h> 

@interface ThePopOverVC : UIViewController 

@end 

我popoverVC.m是除外的backgroundColor變化同樣空:

#import "ThePopOverVC.h" 

@implementation ThePopOverVC 

- (void)loadView 
{ 
    [super loadView]; 
    self.view.backgroundColor = [UIColor yellowColor]; 
} 

你會說這不應該是太辛苦了。但是,我在加載項目時遇到問題。 我收到以下警告:警告:無法恢復先前選定的幀。

那麼這裏出現的問題是: 我忽略了什麼?我做了什麼錯誤,我怎樣才能使這個簡單的原型工作?

// --- 編輯 --- // 好吧,我是一個可以忽略這個人的血腥白癡。

[super loadView]; 

super loadView沒有被調用,給了我這個簡單的問題。 我編輯了代碼,以便它現在可以正常工作。 如果您願意(或其他)使用此教程作爲如何製作UIPopOverScreens的教程。 編號:http://www.raywenderlich.com/1056/ipad-for-iphone-developers-101-uipopovercontroller-tutorial

+0

您可以參考Ray Wenderlich的博客「UIPopoverViewController」。 http://www.raywenderlich.com/1056/ipad-for-iphone-developers-101-uipopovercontroller-tutorial –

回答

0
[super loadView]; 

從ThePopOverVC.m 非常愚蠢的缺失忽視..但是,是的,現在的工作。