我继承UITextField
并添加一个我要显示的绿色按钮
当我编辑或触摸文本字段时,如下所示:
class TextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
self.textAlignment = .Center
self.textColor = .whiteColor()
self.translatesAutoresizingMaskIntoConstraints = false
self.clipsToBounds = true
self.layer.cornerRadius = CGFloat(7.0)
self.layer.borderColor = UIColor.whiteColor().CGColor
self.layer.borderWidth = CGFloat(1.0)
self.borderStyle = .RoundedRect
var frame = clearButtonRectForBounds(bounds)
frame.origin = CGPoint(x: 0.0, y: 0.0)
let button = UIButton(type: .System)
button.backgroundColor = .greenColor()
button.translatesAutoresizingMaskIntoConstraints = false
self.rightView = button
self.rightView?.contentMode = .Center
self.rightViewMode = .WhileEditing
}
}
然后,我在下面的ViewController
中发起了一个实例:
class ViewController: UIViewController {
weak var textField: TextField! {
didSet {
textField.delegate = self
textField.placeholder = "I'm a text field"
superview.addSubview(textField)
}
}
override func viewDidLoad() {
super.viewDidLoad()
textField = TextField()
textField.text = "I'm some text"
}
}
当我点击第一次的文本字段时,绿色按钮会显示。如果我 重新设置键盘(按Enter键)然后再次单击文本字段,绿色按钮不会显示 直到我删除一个角色。
问题1 每次单击文本字段时,如何显示绿色按钮?
如果我继续选择文本字段并按回车键,我最终会收到警告:
`Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.`
问题2 为什么我会收到此警告?
由于
答案 0 :(得分:2)
更改:
self.translatesAutoresizingMaskIntoConstraints = false
为:
self.translatesAutoresizingMaskIntoConstraints = true
修正问题1 。