将 UItextField 和 UITextView 添加到 UIAlertView



>我有这段代码来显示带有两个所需额外对象的警报视图:

- (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];
}

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

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

Hic sunt dracones

子类注释

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

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

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

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

请参阅警报视图

但是,正如在另一篇文章中提到的,UIAlertView已被弃用并替换为 UIAlertController .幸运的是,它带有addTextFieldWithConfigurationHandler:,可让您做您想要的事情。

最新更新