将 UItextField 和 UITextView 添加到 UIAlertView

Posted

技术标签:

【中文标题】将 UItextField 和 UITextView 添加到 UIAlertView【英文标题】:Adding UItextField and UITextView to an UIAlertView 【发布时间】:2015-01-29 21:32:06 【问题描述】:

我有这段代码用于显示带有两个需要的额外对象的警报视图:

- (void)leaveCommentButtonPressed

    UIAlertView *leaveCommentAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Leave comment", nil)
                                                                message:@""
                                                               delegate:self
                                                      cancelButtonTitle:@"Cancel"
                                              otherButtonTitles:@"Done", nil];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 100, 33)];
    [textField setBackgroundColor:[UIColor lightGrayColor]];

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 33, 100, 67)];
    [textView setBackgroundColor:[UIColor darkGrayColor]];

    [view addSubview:textField];
    [view addSubview:textView];

    CGFloat system_version = [[[UIDevice currentDevice] systemVersion] floatValue];

    if (system_version < 7.0) //For Backward compatibility
    
        [leaveCommentAlert addSubview:view];
    
    else
    
        [leaveCommentAlert setValue:view forKey:@"accessoryView"];
    

    [leaveCommentAlert show];

但我的问题是我无法计算 alertView 的宽度来设置我的文本视图和文本字段的宽度。

也许还有其他一些答案如何实现文本字段和文本视图。但我的想法是让UIView 具有适当的大小。

【问题讨论】:

Unable to add UITextField to UIAlertView on ios7...works in iOS 6的可能重复 UIAlertView keyboard overlay textview issue的可能重复 【参考方案1】:

Hic sunt dracones

子类化注释

UIAlertView 类旨在按原样使用,而不是 支持子类化。此类的视图层次结构是私有的,不得修改。

您应该使用警报视图替换。网络上有很多,例如:CXAlertView、DLAlertView 或 SDAlertView

【讨论】:

【参考方案2】:

如果您只是想使用UIAlertView 的默认实现,Apple Docs 还指出:

警报可以包含一个或两个文本字段,其中一个可以是安全的文本输入字段。通过将其 alertViewStyle 属性设置为 UIAlertViewStyle 常量指定的样式之一,您可以在创建警报后将文本字段添加到警报中。警报视图样式可以指定无文本字段(默认样式)、一个纯文本字段、一个安全文本字段(在键入每个字符时显示一个项目符号)或两个文本字段(一个纯文本和一个安全)以适应登录标识符和密码

见Alert Views

但是,正如在另一篇文章中提到的,UIAlertView 已被弃用并由UIAlertController 取代。幸运的是,它带有addTextFieldWithConfigurationHandler:,可以让你做你想做的事。

【讨论】:

UIAlertController 不支持添加文本视图,只支持文本字段。 啊,是的,谢谢@rmaddy,我有一个坏习惯,把这两个读成同一个东西。

以上是关于将 UItextField 和 UITextView 添加到 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章

将 UItextField 和 UITextView 添加到 UIAlertView

UIButton & UITextField 将阻止 UITableViewCell 被滑动删除

将 uitextfield 3 空间中的光标向右移动

将 inputAccessoryView 与多个 UITextField 和 ViewController 一起使用

我将如何保存和加载 UITextField?

将 UITextField 限制在某个字符范围内