OGeek|极客世界-中国程序员成长平台

标题: ios - UITextField rightView 移出 UITextField [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 04:17
标题: ios - UITextField rightView 移出 UITextField

我正在尝试使用 UITextField 类的 rightView 属性为文本字段提供后缀。一切似乎都正常工作,直到我停止编辑文本字段,此时标签被移出 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
    }
}

第一次加载 View 时, View 如下所示:

enter image description here

但是,当文本字段被编辑然后键盘被关闭时,它看起来像下面这样:

enter image description here

这已经在 iOS 7 和 8 上进行了测试,并且两者似乎都在做同样的事情。



Best Answer-推荐答案


原来问题是再次设置 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(),但这有效,所以我只是保持原样。

关于ios - UITextField rightView 移出 UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682139/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4