【发布时间】:2016-09-29 08:14:38
【问题描述】:
我尝试在 UITextField 初始化后设置rightView,但它得到了nil。这是我的课:
class MyTextField: UITextField, UIGestureRecognizerDelegate {
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
prepare()
}
public override init(frame: CGRect) {
super.init(frame: frame)
prepare()
}
public convenience init() {
self.init(frame: .zero)
}
open private(set) var errorUIImageView = UIImageView(image: (resourceName: "ic_error_red"))
open func prepare() {
print("prepare")
let tap = UITapGestureRecognizer(target: self, action: Selector(("handleTap:")))
tap.numberOfTapsRequired = 1
tap.delegate = self
errorUIImageView.isUserInteractionEnabled = true
errorUIImageView.addGestureRecognizer(tap)
self.rightView = errorUIImageView // setting the rightView here
}
@IBInspectable
open var detail: String? {
get {
return detailLabel.text
}
set(value) {
detailLabel.text = value
if let v: String = value {
self.rightViewMode = .always
if self.rightView == nil {
print("nil") // this line is reached!
}
}
else {
self.rightViewMode = .never;
}
}
}
@IBInspectable
open var detailColor = UIColor.red {
didSet {
if let v: String = detailLabel.text {
detailLabel.attributedText = NSAttributedString(string: v, attributes: [NSForegroundColorAttributeName: detailColor])
}
}
}
@IBInspectable
open private(set) lazy var detailLabel = UILabel(frame: .zero)
func handleTap(sender: UITapGestureRecognizer) {
print("tapped")
}
}
大部分代码取自Material
【问题讨论】:
-
我试用了这段代码,它非常适合我。你确定你没有从其他地方将 rightView 设置为 nil 吗?
-
也许您需要更新您的
storyboard? -
@CarienvanZyl 是的,我确定。我将
self.rightView = errorUIImageView移至draw方法,它正在工作。不过还是不知道是什么问题。 -
@Aerows 你能解释更多吗?我应该在情节提要中更新什么?
-
@CarienvanZyl 在下面查看我的答案。
标签: ios swift uitextfield