Objective c 没有尺码的府绸

Objective c 没有尺码的府绸,objective-c,size,uipopovercontroller,popover,Objective C,Size,Uipopovercontroller,Popover,我制作了一个popover类,我可以很容易地调用它来获得基本的popover——你给它数据并设置大小,它应该完成其余的工作 这在iOS5之前一直运行良好,现在popover打开了,但是只有边框,没有空白或内容 我搜索了又搜索,你能给我的任何想法都会很好 @protocol BasicPickerDelegate - (void)basicPickerItemSelected:(NSMutableDictionary *)thisDic; @end @interface BasicPick

我制作了一个popover类,我可以很容易地调用它来获得基本的popover——你给它数据并设置大小,它应该完成其余的工作

这在iOS5之前一直运行良好,现在popover打开了,但是只有边框,没有空白或内容

我搜索了又搜索,你能给我的任何想法都会很好

@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
然后我这样称呼它:

- (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];

}
当我运行它时,会出现
宽度和高度未设置,SETTIN DEFAULTS
对话框。出于某种原因,它没有读取给定的值。尽管有一些修改,但即使我能让它在里面读到它们,也不要认为它们是有效的,并覆盖它们

编辑:因此基本上:

在viewDidLoad中调用setSize时,它不知道宽度和高度是多少。因此它设置了默认值

如果在viewDidLoad中未调用setSize,则会出现“无大小”-即它有popover边框,但其中根本没有内容


当在ViewWillDisplay、ViewDidDisplay或诸如此类(在viewDidLoad之后)中调用setSize时,它实际上并没有设置popover的大小。

最终解决了这个问题

我需要在创建popover之后但在初始化它之前分配宽度/高度变量

修订代码如下:

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];

这是否使用故事板?您是否尝试过
[self.basicpickerpover setpopcovercontentsize:self.basicPicker.view.frame.size]已经存在了吗?(演示前)
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];