我试图使用rightView类的UITextField属性为文本字段提供后缀。这一切似乎都是正确的,直到我停止编辑文本字段,此时标签被移出UITextField。所用的代码是:
class TextFieldWithSuffix: UITextField {
var suffix: String? {
didSet {
let value = self.suffix ?? ""
let label = UILabel(frame: CGRectZero)
label.font = self.font
label.text = value
self.rightView = label
self.rightViewMode = .Always
}
}
override func rightViewRectForBounds(bounds: CGRect) -> CGRect {
var rightViewRect = super.rightViewRectForBounds(bounds)
if let suffix = self.suffix {
let suffixSize = NSString(string: suffix).sizeWithAttributes([NSFontAttributeName: self.font])
rightViewRect.size = suffixSize
}
return rightViewRect
}
}第一次加载视图时,视图如下所示:

但是,当文本字段被编辑后键盘被取消时,如下所示:

这已经在iOS 7和8上进行了测试,两者似乎都在做同样的事情。
发布于 2014-12-30 14:35:11
结果,问题是再次设置了rightView属性,这是在编辑完成时发生的。我发现以下版本解决了这个问题:
class TextFieldWithSuffix: UITextField {
var suffix: String? {
didSet {
let value = self.suffix ?? ""
let suffixLabel = UILabel(frame: CGRectZero)
suffixLabel.font = self.font
suffixLabel.updateFontStyle()
suffixLabel.text = value
self.rightView = nil
self.rightView = suffixLabel
self.rightViewMode = .Always
self.setNeedsLayout()
self.layoutIfNeeded()
}
}
override func rightViewRectForBounds(bounds: CGRect) -> CGRect {
var rightViewRect = super.rightViewRectForBounds(bounds)
if let suffix = self.suffix {
let suffixSize = NSString(string: suffix).sizeWithAttributes([NSFontAttributeName: self.font])
rightViewRect.size = suffixSize
}
return rightViewRect
}
}希望这能帮上忙。如果您经常这样做,您应该更新标签的值,并调用setNeedsLayout()和layoutIfNeeded(),但是这是有效的,所以我只是保留它的原样。
https://stackoverflow.com/questions/27682139
复制相似问题