在运行时创建的控件没有窗口。无法从没有窗口的视图中呈现弹出窗口

时间:2011-11-25 18:40:33

标签: objective-c ios uibutton uiimagepickercontroller uipopovercontroller

我在视图上有按钮并调用以下空格来打开带有图像选择器的弹出窗口控制器,这里没有问题popover想出图像选择器等。

当我在viewDidLoad上以编程方式创建UIButton时,按钮会在下面调用相同的void,但这次抛出异常“无法从没有窗口的视图中显示弹出窗口。

-(IBAction)pickupPhoto:(id)sender
{
    CGRect rect = CGRectMake(100, 100, 1, 1); // [(UIScrollView *)sender frame];
    self.imgPicker = [[UIImagePickerController alloc] init];
    self.imgPicker.delegate = self;
    self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    self.popOver = [[UIPopoverController alloc] initWithContentViewController:imgPicker];
    [popOver setDelegate:self];
    [popOver presentPopoverFromRect:rect inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO];
    [imgPicker release];
}

这里我在相同的视图按钮上创建按钮调用虚空。

-(void)addButtons
{
for (int i = 0; i < 10; i++) {
    self.btn = [[UIButton alloc] initWithFrame:CGRectMake(i * 100, 0, 100, 80)];
    [[self.btn layer] setBorderColor:RGB(245, 245, 245).CGColor];
    [[self.btn layer] setBorderWidth:1.0f];
    [[self.btn titleLabel] setFont:[UIFont fontWithName:@"Thonburi" size:70]];
    [self.btn setTitle:doubleToString(i+1) forState:UIControlStateNormal];
    [self.btn setTitleColor:RGB(245, 245, 245) forState:UIControlStateNormal];
    [self.btn setTitle:doubleToString(i+1) forState:UIControlStateSelected];
    [self.btn setTitleColor:RGB(125, 225, 225) forState:UIControlStateHighlighted];
    [self.btn addTarget:[NMBPostUI alloc] action:@selector(pickupPhoto:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    [btn release];
    }
}

我可以看到当我调用 - (void)addButtons时,self.view.window为在运行时创建的导致问题的按钮返回nil。是的我应该在init期间创建按钮,但是当您将视图控制器作为-storyBoard- Page Sheet调用时,没有init调用。我怎么能绕过这个?

欢迎任何想法。 非常感谢。

1 个答案:

答案 0 :(得分:0)

尝试在以下位置创建按钮:

initWithNibName:bundle: 

awakeFromNib

方法。也许这会奏效。