iOS UIAlertview与uitextview可编辑

时间:2015-02-11 12:39:35

标签: ios uitextview uialertview

我正在寻找一种在UIAlertView中放置UITextView的方法。

我知道如何将简单的文本字段放在:

alert.alertViewStyle = UIAlertViewStylePlainTextInput;

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

这可能吗?

2 个答案:

答案 0 :(得分:1)

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

Apple不允许开发人员修改UIAlertView的视图层次结构或将其子类化。查看Apple Documentation for UIAlertView。在标有子类别备注的部分下,您会找到

  

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

不幸但是因为UIAlertView仍然使用addSubview:方法,所以它与Apple实际告诉我们的内容相矛盾,但原因仍然是因为UIAlertView是{{1}的子类哪个有这个方法。所以Apple所做的是他们已经覆盖了这个方法,所以它绝对没有任何意义,所以当你致电UIView时什么都不做,而且[myAlertView addSubview:myView];都不会添加任何视图。

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

幸运的是,在iOS 8中,Apple引入了一个名为UIAlertView的新类,它允许您获取您所追求的行为并且已弃用UIAlertController类。

答案 1 :(得分:0)

将自定义视图添加到警报视图。

根据要求将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:{})
    }

enter image description here

enter image description here