2011-10-27 2 views
0

私は基本的なポップオーバーのために簡単に呼び出すことができるポップオーバークラスを作成しました。データを与えてサイズを設定し、残りの作業を行う必要があります。サイズのないポップオーバー

これはiOS5までうまくいきましたが、今度はポップオーバーが開きますが、枠線だけで空白や内容は全くありません。

私は自分の道を捨てる可能性のあるアイディアを検索し、検索しました。

@protocol BasicPickerDelegate 
- (void)basicPickerItemSelected:(NSMutableDictionary *)thisDic; 
@end 


@interface BasicPickerController : UITableViewController { 

// data 

IBOutlet NSMutableArray *theData; 

// stuff to set 

IBOutlet int myWidth; 
IBOutlet int myHeight; 

IBOutlet int myPopoverNum; 

// delegate 
id<BasicPickerDelegate> delegate;  

} 

@property (nonatomic, retain) IBOutlet NSMutableArray *theData; 

@property (nonatomic, assign) IBOutlet int myWidth; 
@property (nonatomic, assign) IBOutlet int myHeight; 
@property (nonatomic, assign) IBOutlet int myPopoverNum; 

@property (nonatomic, assign) id<BasicPickerDelegate> delegate; 

- (void)setSize; 
- (void)checkData; 

@end 

その後のsetSize機能は、のviewDidLoad

- (void)setSize { 

    if (!myWidth || !myHeight) { 

     NSLog(@"WIDTH AND HEIGHT NOT SET, SETTING DEFAULTS"); 
     myWidth = 100; 
     myHeight = 100; 

    } 

    self.contentSizeForViewInPopover = CGSizeMake(myWidth, myHeight); 
} 

ですそれから私はこのようにそれを呼び出す:私はそれを実行すると

- (IBAction)showBasicPopover:(id)sender { 

    // Show Basic Popover - can be reused 

    if (basicPicker != nil) { 

     self.basicPicker = nil; 
     [self.basicPicker release]; 

    } 

    self.basicPicker = [[[BasicPickerController alloc] initWithStyle:UITableViewStylePlain] autorelease]; 

    basicPicker.delegate = self; 

    self.basicPickerPopover = [[[UIPopoverController alloc] 
            initWithContentViewController:basicPicker] autorelease];  

    // Give popover the data it needs 

    NSMutableDictionary *sizeDic = [self returnPopoverSize:[sender tag]]; 

    self.basicPicker.myHeight = [[sizeDic objectForKey:@"height"] intValue]; 
    self.basicPicker.myWidth = [[sizeDic objectForKey:@"width"] intValue]; 
    self.basicPicker.myPopoverNum = [sender tag]; 

    [basicPicker viewDidLoad]; 

    self.basicPicker.theData = [self returnPopoverData:[sender tag]]; 

    NSLog(@"giving popover dic (%d) with %d derps", [sender tag], [self.basicPicker.theData count]); 

    // Set display settings and show popover 

    [basicPicker viewWillAppear:YES]; 

    CGRect popoverRect = [self.view convertRect:[sender frame] 
             fromView:[sender superview]]; 

    [self.basicPickerPopover presentPopoverFromRect:popoverRect 
              inView:self.view 
          permittedArrowDirections:UIPopoverArrowDirectionAny 
              animated:YES]; 

} 

WIDTH AND HEIGHT NOT SET, SETTIN DEFAULTSダイアログが起動します。何らかの理由で、それが与えられた値を読むのではありません。たとえ私がそれを読むためにそれを得ることができるとしても、それらが有効であり、それらを上書きするとは思わない。

編集:だから、基本的に

のsetSizeは、のviewDidLoadで呼び出されると、それは、幅と高さが何であるかを知りません。デフォルトを設定します。

viewDidLoadでsetSizeが呼び出されない場合は、「サイズなし」が表示されます。つまり、ポップオーバーの境界線はありますが、内容はまったくありません。

setSizeがviewWillAppear、viewDidAppear、またはそのようなもの(viewDidLoadの後)で呼び出された場合、実際にはpopoverのサイズは設定されません。

+0

は、この使用してストーリーボードかいませんか? – Simon

+0

いいえ、ストーリーボードはありません。 – Batnom

+0

'[self.basicPickerPopover setPopoverContentSize:self.basicPicker.view.frame.size];'すでに試したことがありますか? (発表前) –

答えて

0

最後にこれを理解しました。

の後にポップオーバーを作成した後、の前にを初期化する必要がありました。

以下の改訂コード:

self.basicPicker = [[[BasicPickerController alloc] initWithStyle:UITableViewStylePlain] autorelease]; 

// Give popover the data it needs 

basicPicker.delegate = self; 

NSMutableDictionary *sizeDic = [self returnPopoverSize:[sender tag]]; 

self.basicPicker.myHeight = [[sizeDic objectForKey:@"height"] intValue]; 
self.basicPicker.myWidth = [[sizeDic objectForKey:@"width"] intValue]; 
self.basicPicker.myPopoverNum = [sender tag]; 

// Now init 

self.basicPickerPopover = [[[UIPopoverController alloc] 
          initWithContentViewController:basicPicker] autorelease];  

[basicPicker viewDidLoad]; 
関連する問題