Sat*_*aty 24 uitextfield ios swift swift3
我可以使用右视图在UITextField右侧的文本字段中添加一个按钮,但是文本在按钮上重叠.下面是右视图按钮的代码
UIView.commitAnimations()
var btnColor = UIButton(type: .Custom)
btnColor.addTarget(self, action: #selector(self.openEmoji), forControlEvents: .TouchUpInside)
btnColor.frame = CGRect(x: CGFloat(textField.frame.size.width - 25), y: CGFloat(5), width: CGFloat(25), height: CGFloat(25))
btnColor.setBackgroundImage(UIImage(named: "send.png"), forState: .Normal)
textField.addSubview(btnColor)
Run Code Online (Sandbox Code Playgroud)
请让我知道如何从右侧视图填充文本.
Anb*_*hik 51
使用UITextField 的rightView属性.基本上,有两个属性(相应的这一个和leftView)允许您在UITextField中放置自定义视图/控件.您可以通过rightViewMode/leftViewMode属性控制是否显示这些视图:
textField.rightView = btnColor
textField.rightViewMode = .unlessEditing
Run Code Online (Sandbox Code Playgroud)
例如
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "send.png"), for: .normal)
button.imageEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0)
button.frame = CGRect(x: CGFloat(txt.frame.size.width - 25), y: CGFloat(5), width: CGFloat(25), height: CGFloat(25))
button.addTarget(self, action: #selector(self.refresh), for: .touchUpInside)
textField.rightView = button
textField.rightViewMode = .always
Run Code Online (Sandbox Code Playgroud)
并将行动称为
@IBAction func refresh(_ sender: Any) {
}
Run Code Online (Sandbox Code Playgroud)
小智 5
创建UITextField扩展并在其中添加以下方法,您可以根据需要更改UIButton代码。
func setRightViewIcon(icon: UIImage) {
let btnView = UIButton(frame: CGRect(x: 0, y: 0, width: ((self.frame.height) * 0.70), height: ((self.frame.height) * 0.70)))
btnView.setImage(icon, for: .normal)
btnView.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 3)
self.rightViewMode = .always
self.rightView = btnView
}
Run Code Online (Sandbox Code Playgroud)
小智 5
正确答案 Swift3+
如果您只是覆盖这些方法,则文本可能会与右视图重叠。这段代码完全解决了这个问题。
你 UITextField 子类:
//...
private func setInsets(forBounds bounds: CGRect) -> CGRect {
var totalInsets = insets //property in you subClass
if let leftView = leftView { totalInsets.left += leftView.frame.origin.x }
if let rightView = rightView { totalInsets.right += rightView.bounds.size.width }
return UIEdgeInsetsInsetRect(bounds, totalInsets)
}
override func textRect(forBounds bounds: CGRect) -> CGRect {
return setInsets(forBounds: bounds)
}
override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
return setInsets(forBounds: bounds)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return setInsets(forBounds: bounds)
}
override func rightViewRect(forBounds bounds: CGRect) -> CGRect {
var rect = super.rightViewRect(forBounds: bounds)
rect.origin.x -= insets.right
return rect
}
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var rect = super.leftViewRect(forBounds: bounds)
rect.origin.x += insets.left
return rect
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29905 次 |
| 最近记录: |