• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UITextField rightView 移出 UITextField

[复制链接]
菜鸟教程小白 发表于 2022-12-13 04:17:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试使用 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap