在 UITextfield 中定位“清除按钮”
Posted
技术标签:
【中文标题】在 UITextfield 中定位“清除按钮”【英文标题】:Position "Clear Button" in UITextfield 【发布时间】:2019-09-04 11:42:37 【问题描述】:有没有办法定位清除按钮?我想将它向下移动一点,使其与文本输入处于同一水平。有什么想法吗?
我的文本字段已经是另一个处理效果的类的子类。包含“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)
`
【问题讨论】:
你为那个清除按钮使用了什么自定义按钮或使用了文本字段属性? firstNameTextField.clearButtonMode = .whileEditing 这是关于清除按钮的唯一代码 @Chris 你可以试试这个 - ***.com/a/27066764/3683408 找出清除按钮坐标值的简单方法是什么? 【参考方案1】:子类化您的文本字段并覆盖 clearButtonRect
函数
class CustomTextField: UITextField
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect
return CGRect(x: xPos, y:yPos, width: yourWidth, height: yourHeight)
编辑 1 - 子类 3rd 方文本字段
当您使用第 3 方库调用 TextFieldEffects 时,您需要按照以下步骤操作。
如果您正在使用情节提要并在那里有一个文本字段(将类设置为 CustomTextField)
如果您可以通过编程方式进行操作,则需要在此处进行更改。
然后创建一个新的 swift 文件,命名为 CustomTextField.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)
输出
希望这会有所帮助。
【讨论】:
有没有一种简单的方法可以找出 x、y、宽度和高度的值? 我的 Textfields 已经是一个子类,所以我将您的代码复制到其中,但它什么也没做,即使是奇怪的值。 覆盖 open func clearButtonRect(forBounds bounds: CGRect) -> CGRect return CGRect(x: 0, y: 5.0, width: 10, height: 3) @Chris 如果您运行应用程序并按照此Developer Tools for UI Debugging 操作,您将能够找到 x 和 y 位置 如代码中所述,您需要修改您的return CGRect(x: 0, y: 5.0, width: 10, height: 3)
以满足您的需求。再次查看更新的答案,我已更改退货声明并添加了图片。【参考方案2】:
您可以创建自己的自定义文本字段
Chirag 的回答是正确的,但根据 Apple 的说法,您的方法应该调用超级实现并只修改返回的矩形的原点
class CustomTextField : UITextField
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect
let rect = super.clearButtonRect(forBounds: bounds)
return rect.offsetBy(dx: customX, dy: customY)
【讨论】:
能否请您添加相关苹果文档的链接? developer.apple.com/documentation/uikit/uitextfield/…【参考方案3】:基于此处的有用答案... 并回答有关如何自动找到合适的 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)
这只是将清除按钮向下移动占位符矩形高度的一半。保证以任何文本字段大小的字段的实际输入部分为中心。
【讨论】:
以上是关于在 UITextfield 中定位“清除按钮”的主要内容,如果未能解决你的问题,请参考以下文章
UITextField 的清除按钮在 UITableViewCell 中不起作用