我正在尝试使用自定义文本字段背景。问题是文本在左侧看起来太近了。
在没有子类化UITextField的情况下,我没有看到任何移动文本的方法。所以我试图扩展和覆盖
- (void)drawTextInRect:(CGRect)rect{
NSLog(@"draw rect");
CGRect newRect = CGRectMake(rect.origin.x+20,rect.origin.y,rect.size.width-20,rect.size.height);
[super drawTextInRect:newRect];
}
但由于某种原因,日志永远不会打印。我知道子类正在被使用,因为我在init中也有一个日志,打印得很好。
What goig on
EDIT。
我也试试
- (CGRect)textRectForBounds:(CGRect)bounds{
NSLog(@"bounds");
CGRect b = [super textRectForBounds:bounds];
b.origin.x += 20;
return b;
}
这实际上是追踪,但它似乎没有移动
答案 0 :(得分:14)
我认为您可以使用leftView
属性。
您可以将leftView
和rightView
添加到UITextfield。这些视图可用于显示图标,但如果它是一个空视图,它只会占用空间,这就是你想要的。
CGFloat leftInset = 5.0f;
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, leftInset, self.bounds.size.height)];
self.leftView = leftView;
self.leftViewMode = UITextFieldViewModeAlways;
[leftView release];
答案 1 :(得分:7)
另一个灵魂:
在你的appDelegate.m文件中,在顶部写下面的代码
@interface UITextField (myCustomTextField)
@end
@implementation UITextField (myCustomTextField)
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds, 10, 0);
}
- (CGRect)editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds, 10, 0);
}
@end
答案 2 :(得分:5)
仅供参考,但我遇到了同样的问题并最终意识到还有一个editingRectForBounds:方法。当您最初在字段中输入内容时,控件会使用该控件。如果它有一个值并且不再处于编辑模式,则它使用textRectForBounds:来决定在哪里绘制文本。
答案 3 :(得分:5)
我没有尝试过托马斯的方法,但只是为了澄清肖恩的答案,这对我有用:
<强> MyInsetUITextField.m 强>
#import "MyInsetUITextField.h"
@implementation MyInsetUITextField
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds, 10, 0);
}
- (CGRect)editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds, 10, 0);
}
@end
<强> MyInsetUITextField.h 强>
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface MyInsetUITextField : UITextField {
}
@end
感谢。
答案 4 :(得分:-1)
简而言之,对于我们这些使用Xcode界面构建器的人来说,有一种轻松的方式:
更简单:将UIImageView放在文本字段后面
最简单:将UITextView上的边框样式更改为除最右边&#34;图形圈&#34;以外的任何样式,然后添加图像作为背景。图像优先于图形,但仍然可以获得正常图像背景所需的填充。