ios 优雅的用UIAlertController显示任意控件

@vrqq  May 30, 2017

环境: Swift3 iOS10
起先是研究往这个弹出提示框里面放UITextView,为输出多行文本,然后发现。。
没有UIAlertController.addTextView方法,只有addTextField,只好作罢,在网上一通寻找以后。。
发现各种中文的英文的解决方案都是\n\n\n\n\n\n,就是在title上面留好多个\n把位置撑起来,然后再alertController.view.addSubview(textView),可丑陋。。。。。。

更新:整个sample工程已经上传https://github.com/vrqq/jjgkimg
sample为国家电网公司在现场拍照片时候用的ios app。

直到发现了这个

https://stackoverflow.com/questions/37428337/customised-uiactionsheet/37428360#37428360
先上效果图吧
WechatIMG137.jpeg

实现是重写了一下UIAlertController,直接贴代码吧

    class PlaceAlertController : UIAlertController {
    private var projtext : UITextView
    
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        projtext = UITextView(frame: CGRect(x: 0, y: 0, width: 200, height: 150))
        let controller = UIViewController()
        controller.view = projtext
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        self.setValue(controller, forKey: "contentViewController")
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    }

相比\n\n已然很优雅了。。。就是那个UITextView的CGRect调了不动。。可能还没有领悟精髓吧

另外还有

UIStackView是不能设背景色的,网上这么说:

You can't do this – UIStackView is a non-drawing view, meaning that drawRect() is never called and its background color is ignored. If you desperately want a background color, consider placing the stack view inside another UIView and giving that view a background color.

想想也是啊,就像吃饭哪有啃碟子的。。。。。。


添加新评论