【发布时间】:2013-10-24 22:49:11
【问题描述】:
我创建了一个自定义 UIAlertView(从头开始,没有以任何方式子类化)类,效果很好,但是当警报有一个文本字段时我遇到了问题。在这种特殊情况下,当我点击电子邮件地址字段时,键盘会出现在我的弹出警报下方。调用此弹出窗口的视图也有一个UITextField(一个评论框)。我注意到我只有在点击主视图文本字段(评论框)之后点击弹出文本字段(电子邮件地址)时才会遇到这个问题。文本字段未使用相同的委托。
有没有办法将键盘强制放在视图层次结构的前面?
更新:
将文本字段添加到弹出窗口的代码(这是我的警报类 PopupDialog.m 中的一个)
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 100, 34)];
_textField.font = [UIFont fontWithName:@"GillSans" size:18];
_textField.borderStyle = UITextBorderStyleRoundedRect;
_textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
_textField.backgroundColor = [UIColor white];
_textField.delegate = self;
_textField.placeholder = @"email@domain.com";
它稍后被添加到按钮上方的弹出视图中。半透明的黑色背景和弹出视图最终通过以下方式添加到视图层次结构中:
[[[[UIApplication sharedApplication] windows] lastObject] addSubview:background];
[[[[UIApplication sharedApplication] windows] lastObject] addSubview:self];
【问题讨论】:
-
如果您可以显示创建警报视图的代码会有所帮助。例如,您是否使用 alertViewStyle 让它显示文本字段?
-
我已经添加了将文本字段添加到视图的代码。我认为 2 UITextField 代表有些混淆。权利的被调用,但键盘没有被带到前面。
-
如何将自定义警报添加到视图层次结构中?
-
好吧,这听起来很 hacky,但你可以做的是,子类化你的 UITextField 并放入方法 -(UIView*)inputView{} 那就是被调用的方法当键盘即将出现时,截取键盘 UIView* keyboard = [super inputView];然后传递然后将该视图添加到窗口。
-
只要您的警报的文本字段是第一响应者,当您点击键盘时它应该可以工作
标签: ios iphone uitextfield