我做了一個popover類,我可以很容易地調用基本的popovers - 你給它的數據和設置的大小,它應該做的休息。沒有尺寸的Popover
這工作正常,直到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,它就會出現「沒有大小」 - 即它有彈出邊框,但根本沒有內容。
當在viewWillAppear,viewDidAppear或類似的東西(在viewDidLoad之後)調用setSize時,它實際上並沒有設置popover的大小。
這是使用情節串連與否? – Simon
不,沒有故事板。 – Batnom
你有沒有試過'[self.basicPickerPopover setPopoverContentSize:self.basicPicker.view.frame.size];'已經? (呈現之前) –