[编辑]嗯.也许这个问题应该标题为"CocoaTouch中调用的默认用户输入对话框视图是什么?" 我意识到我可以创建一个完全符合我想要的视图,并将其包装在视图控制器和presentModalView中 - 但我有点希望有一个标准的,普通的用户输入"对话框"视图 - 与Cocoa-touch."输入您的姓名","输入要搜索的文字"等,都是非常常见的事情!
无论如何......这是我最初提出的问题:
这段代码:
UIAlertView* find = [[UIAlertView alloc] init]; [find setDelegate:self]; [find setTitle:@"Find"]; [find addButtonWithTitle:@"Cancel"]; [find addButtonWithTitle:@"Find & Bring"]; [find addButtonWithTitle:@"Find & Go"]; [find addButtonWithTitle:@"Go To Next"]; [find addSubview:_findText]; CGRect frm = find.frame; int height = frm.size.height + _findText.frame.size.height + 100; // note how even 100 has no effect. [find setFrame:CGRectMake(frm.origin.x, frm.origin.y, frm.size.width, height)]; [find setNeedsLayout]; [find show]; [find release];
生成此警报视图:
查找提醒http://www.publicplayground.com/IMGs/Misc/FindAlert.png
(我从emi1Faber的这个问题的代码开始,它的工作方式与广告一样;但是,正如我在评论中所述,取消按钮覆盖了文本字段.)
如何重新调整所有内容以使文本字段正确匹配?[findAlert setNeedsLayout]似乎没有做任何事情,即使在我[findAlert setFrame:tallerFrame]之后.提示?
谢谢!
向下移动文本视图最简单(也是最正确的方法)是添加消息
[find setMessage:@"\n"];
此外,框架未生效的原因是-show
在开始动画之前设置框架并创建视图层次结构.您还应该使文本视图成为第一个响应者,以便弹出键盘.
完整示例:
// Create Alert UIAlertView* av = [UIAlertView new]; av.title = @"Find"; // Add Buttons [av addButtonWithTitle:@"Cancel"]; [av addButtonWithTitle:@"Find & Bring"]; [av addButtonWithTitle:@"Find & Go"]; [av addButtonWithTitle:@"Go to Next"]; // Make Space for Text View av.message = @"\n"; // Have Alert View create its view heirarchy, set its frame and begin bounce animation [av show]; // Adjust the frame CGRect frame = av.frame; frame.origin.y -= 100.0f; av.frame = frame; // Add Text Field UITextField* text = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)]; text.borderStyle = UITextBorderStyleRoundedRect; [av addSubview:text]; [text becomeFirstResponder];
注意:您也可以修改UIAlertView的子视图,但是由于Apple已经更改了UIAlertView布局,因此在设置新的布局之前应该检查其类描述和框架与已知值.你甚至可以得到这样的东西:
(来源:booleanmagic.com)
即使你能够实现这一点,它也不会非常像iPhone-y.该UIAlertView
真的不适合这样的用户输入.如果您查看所有Apple应用程序,您会看到他们使用的是使用presentModalViewController:
方法显示的新视图UIViewController
.
编辑:这个建议不再像我写的那样真实.Apple越来越多地使用警报视图作为文本输入框,而iOS5甚至包括本机支持,而不必混淆视图(查看alertViewStyle
属性).
我想也许你需要有四个按钮然后使用自定义UIViewController
可能仍然是正确的方法.但是如果你只想用OK/Cancel按钮输入密码,那就没关系了.