在UITextfield中放置“清除按钮”

时间:2019-09-04 11:42:37

标签: ios swift uitextfield

有没有办法放置清除按钮?我想将其向下移动一点,使其与文本输入处于同一水平。有什么想法吗?

我的文本字段已经是另一个处理效果的类的子类。包括“ 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)
        }
    }`

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)

Setting CustomTextField Class

如果您可以通过编程方式进行操作,则需要在此处进行更改。

然后创建一个名为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) 
    }
}

输出

Output Image

希望这会有所帮助。

答案 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)
    }
}

这只是将清除按钮向下移动占位符矩形高度的一半。对于任何文本字段大小,保证以字段的实际输入部分为中心。