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

Posted

技术标签:

【中文标题】在运行时创建的控件没有窗口。无法从没有窗口的视图中显示弹出框【英文标题】:Controls created on runtime has no window. Popovers cannot be presented from a view which does not have a window 【发布时间】:2011-11-25 18:40:32 【问题描述】:

我在视图上有按钮并调用下面的 void 来打开带有图像选择器的弹出框控制器,这里弹出框带有图像选择器等没问题。

当我在 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。

-(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。是的,我应该在初始化期间创建按钮,但是当您将视图控制器称为 -storyBoard- Page Sheet 时没有初始化调用。我怎么能绕过这个?

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

【问题讨论】:

好的,这次从代码调用并在初始化期间创建按钮。没有任何改变。 【参考方案1】:

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

initWithNibName:bundle: 

awakeFromNib

方法。也许这会奏效。

【讨论】:

以上是关于在运行时创建的控件没有窗口。无法从没有窗口的视图中显示弹出框的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewController :“无法从没有窗口的视图中呈现弹出框。”

UIPopoverController & UIImagePickerControl:“无法从没有窗口的视图中呈现弹出框”

为什么我在创建报告时看不到“报告数据”窗口?

随着窗口变小,OSX 自动布局无法重绘某些控件

如何从没有控制台窗口的 C/C++ 执行批处理文件?

visual C++ 创建一个窗口却无法显示窗口的原因是啥?