出于某种原因,当我添加一个UITextfield作为tablecell的contentview的子视图时,clearbutton不会与字段中输入的文本对齐,并且会在它下面显示一点。有什么方法可以移动clearbutton的文本来阻止这种情况发生吗?谢谢你的帮助,
答案 0 :(得分:30)
如@Luda所述,正确的方法是继承UITextField并覆盖- (CGRect)clearButtonRectForBounds:(CGRect)bounds
。但是传入方法的边界是视图本身的边界而不是按钮。因此,您应该调用super
来获取操作系统提供的大小(以避免图像失真),然后调整原点以满足您的需求。
e.g。
- (CGRect)clearButtonRectForBounds:(CGRect)bounds {
CGRect originalRect = [super clearButtonRectForBounds:bounds];
return CGRectOffset(originalRect, -10, 0); //shift the button 10 points to the left
}
Apple docs声明:
讨论您不应直接调用此方法。如果你想 将清除按钮放在不同的位置,您可以覆盖它 方法并返回新的矩形。你的方法应该调用super 实现并修改返回的矩形的原点。 更改清除按钮的大小可能会导致不必要的失真 按钮图像。
答案 1 :(得分:6)
我已经将UITextField
子类化,并覆盖了函数clearButtonRectForBounds:
。
<强>·H 强>
#import <UIKit/UIKit.h>
@interface TVUITextFieldWithClearButton : UITextField
@end
<强>的.m 强>
#import "TVUITextFieldWithClearButton.h"
@implementation TVUITextFieldWithClearButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)awakeFromNib
{
self.clearButtonMode = UITextFieldViewModeWhileEditing;
}
- (CGRect)clearButtonRectForBounds:(CGRect)bounds
{
return CGRectMake(bounds.size.width/2-20 , bounds.origin.y-3, bounds.size.width, bounds.size.height);
}
@end
答案 2 :(得分:2)
我还没有看到这个,屏幕截图会有所帮助。但是,快速回答是你可以检查UITextField的子视图数组,找到包含clear按钮的子视图,并调整它的frame.origin。
编辑:我似乎对这个答案(2010年写的)投了赞成票。这不是一个“正式”批准的方法,因为你正在操纵私有对象,但Apple无法检测到它。主要风险是视图层次结构可能会在某些时候发生变化。
答案 3 :(得分:2)
UITextField子类并覆盖此方法:
- (CGRect)clearButtonRectForBounds:(CGRect)bounds
{
return CGRectMake(bounds.origin.x - 10, bounds.origin.y, bounds.size.width, bounds.size.height);
}
返回符合您需求的CGRect。
答案 4 :(得分:0)
Swift 4版本将是
import UIKit
class LoginTextField: UITextField {
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(x: xPos, y:yPos, width: yourWidth, height: yourHeight)
}
}
答案 5 :(得分:0)
Van Du Tran在Swift 4中的回答:
class CustomTextField: UITextField {
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect {
let originalRect = super.clearButtonRect(forBounds: bounds)
return originalRect.offsetBy(dx: -8, dy: 0)
}
}
答案 6 :(得分:0)
快捷键4、5
子类UITextField(工作正常,经过测试)
class textFieldWithCrossButtonAdjusted: UITextField {
override func clearButtonRect(forBounds bounds: CGRect) -> CGRect {
let originalRect = super.clearButtonRect(forBounds: bounds)
//move 10 points left
return originalRect.offsetBy(dx: -10, dy: 0)
}
}