有没有办法放置清除按钮?我想将其向下移动一点,使其与文本输入处于同一水平。有什么想法吗?
我的文本字段已经是另一个处理效果的类的子类。包括“ clearButtonRect”功能不起作用。
@IBDesignable open class HoshiTextField: TextFieldEffects {
//effect functions..
override open func clearButtonRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(x: 0, y: 0.2, width: 0.1, height: 0.3)
}
}`
答案 0 :(得分:1)
子类化您的文本字段并覆盖clearButtonRect
函数
class CustomTextField: UITextField {
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(x: xPos, y:yPos, width: yourWidth, height: yourHeight)
}
}
编辑1-子类别3rd Party Textfield
在使用第三方库调用TextFieldEffects时,您需要执行以下步骤。
如果您正在使用情节提要,并且在那里有一个文本字段(将类设置为CustomTextField)
如果您可以通过编程方式进行操作,则需要在此处进行更改。
然后创建一个名为swiftTextField.swift的新swift文件,并添加以下代码
import UIKit
import TextFieldEffects // Import the 3rd party library
// Now you are subclassing the 3rd party textfield
// Change it to the textfield you are using and if you are using multiple create subclass for individual ones.
class CustomTextField: HoshiTextField {
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect {
// change the return line as per your requirement.
return CGRect(x: 300, y: 25, width: 40, height: 20)
}
}
输出
希望这会有所帮助。
答案 1 :(得分:1)
您可以创建自己的自定义文本字段
Chirag的答案是正确的,但根据Apple的说法,您的方法应调用super实现并仅修改返回的矩形的原点
class CustomTextField : UITextField
{
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect{
let rect = super.clearButtonRect(forBounds: bounds)
return rect.offsetBy(dx: customX, dy: customY)
}
}
答案 2 :(得分:0)
已经建立在有用的答案的基础上... 并回答有关如何自动找到合适的 x/y 位置的评论。这是我对 TextFieldEffects 库中文本字段的通用扩展的解决方案(我使用的是 YoshikoTextField,但该解决方案适用于任何带有浮动在字段上方的占位符的情况):
来自该库的文本字段有一个占位符 rect,它允许我们获取文本字段上部的高度,这会导致错误的偏移。
import UIKit
import TextFieldEffects
class CustomYoshikoTextField: YoshikoTextField {
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect {
let rect = super.clearButtonRect(forBounds: bounds)
let placeholderHeight = self.placeholderRect(forBounds: bounds).height
return rect.offsetBy(dx: 0, dy: placeholderHeight * 0.5)
}
}
这只是将清除按钮向下移动占位符矩形高度的一半。对于任何文本字段大小,保证以字段的实际输入部分为中心。