在运行时创建的控件没有窗口。无法从没有窗口的视图中显示弹出框
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:“无法从没有窗口的视图中呈现弹出框”