iOS UIAlertview 与 uitextview 可编辑

Posted

技术标签:

【中文标题】iOS UIAlertview 与 uitextview 可编辑【英文标题】:iOS UIAlertview with uitextview editable 【发布时间】:2015-02-11 12:39:35 【问题描述】:

我正在寻找一种将可编辑的 UITextView 放入 UIAlertView 的方法。

我知道如何使用 :

放置一个简单的文本字段
alert.alertViewStyle = UIAlertViewStylePlainTextInput;

但这不是我想要的。我想要更大的文本输入,以便用户可以在新闻之后写评论。

这可能吗?

【问题讨论】:

那么为什么要使用警报视图呢?您可以在 UITextView 中使用 uiview,只需在评论时将其添加为子视图。 我已经在表格视图中有一个评论列表,我想从我的视图中取出“添加评论”以减少位置 所以你可以添加一个 uiview 而不是显示 alertview,例如:[self.tableview addsubview:uiview] 或者这个自定义控件可能会帮助你github.com/wimagguc/ios-custom-alertview 不可能向UIAlertView 添加视图,因此实际上不可能使用UITextViewUIAlertView 获得您想要的。但是,您可以寻找自定义的 alertView。看看这个谷歌搜索google.co.uk/… 【参考方案1】:

不幸的是,UIAlertView 无法实现您所追求的目标。

Apple 不允许开发人员修改 UIAlertView 的视图层次结构或对其进行子类化。查看Apple Documentation for UIAlertView。在标记为子类化注释的部分下,您会发现

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

不幸的是,虽然UIAlertView 仍然有addSubview: 方法,所以它与Apple 实际告诉我们的内容相矛盾,但它仍然存在的原因是因为UIAlertViewUIView 的子类,它具有此方法。因此,Apple 所做的是他们已经覆盖了这个方法,因此它绝对不会做任何事情,所以当你调用 [myAlertView addSubview:myView]; 时不会做任何事情,并且不会将视图添加到 UIAlertView

因此,要获得您需要实现自定义 AlertView 之后的行为(查看 Google 搜索 Custom UIAlertView)。

幸运的是,Apple 在 iOS 8 中引入了一个名为 UIAlertController 的新类,可让您获得您所追求的行为,并且他们已弃用 UIAlertView 类。

【讨论】:

【参考方案2】:

在警报视图中添加自定义视图。

根据要求将preferredStyle 更改为.alert 和.actionsheet。

func showPopUpWithTextView() 
        let alertController = UIAlertController(title: "\n\n\n\n\n\n", message: nil, preferredStyle: .actionSheet)

        let margin:CGFloat = 8.0
        let rect = CGRect(x: margin, y: margin, width: alertController.view.bounds.size.width - margin * 4.0, height: 100.0)
        let textView = UITextView(frame: rect)
        textView.backgroundColor = .clear

        alertController.view.addSubview(textView)

        let submitAction = UIAlertAction(title: "Something", style: .default, handler: (alert: UIAlertAction!) in print("Submit")
            print(textView.text)
        )

        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: (alert: UIAlertAction!) in print("cancel"))

        alertController.addAction(submitAction)
        alertController.addAction(cancelAction)

        self.present(alertController, animated: true, completion:)
    

【讨论】:

以上是关于iOS UIAlertview 与 uitextview 可编辑的主要内容,如果未能解决你的问题,请参考以下文章

iOS UIAlertview 与 uitextview 可编辑

UIAlertView 显示方法与新的 UIAlertController 对象等效吗?

iOS6 UIAlertView.title 坏了?

iOS--UIAlertView与UIAlertController和UIAlertAction之间的事儿

找出用户在iOS显示的UIAlertView上选择了哪个按钮的方法,请求允许应用程序接收推送通知

iOS:简单使用UIAlertVIew和UIActionSheet