uiTextField中的文本向右XX像素(xcode)

问题描述:

我有一个UITextField的自定义背景。但UITextField的前20个像素是由设计采取的。文本应从左侧开始30像素。我搜索了很多,但我找不到它。我已经看到像重写属性这样的东西,但是对于这个基本的东西来说真的是必要的吗?uiTextField中的文本向右XX像素(xcode)

+0

有可能是你的'UITextField'将超过1线长? – HelmiB 2012-03-03 16:35:47

我已经看到了两种不同的解决方案:

  • 添加一个空UIView当U ITextView
  • 子类的UITextField的leftView财产,并覆盖方法textRectForBounds:editingRectForBounds: - 刚刚返回框架与插图应用

恕我直言,第二个更优雅。

举例: .H:

#import <UIKit/UIKit.h> 

@interface BlackTextField : UITextField 

@property (nonatomic, assign) CGFloat paddingRight, paddingTop, paddingLeft, paddingBottom; 
@end 

.M:

#import "BlackTextField.h" 
#import <QuartzCore/QuartzCore.h> 

@implementation BlackTextField 
@synthesize paddingTop, paddingBottom, paddingLeft, paddingRight; 

- (id)initWithCoder:(NSCoder *)coder { 
    self = [super initWithCoder:coder]; 
    if (self) {   
     self.paddingRight = 10; 
     self.paddingLeft = 10; 
     self.paddingTop  = 5; 
     self.paddingBottom = 5;   
    } 
    return self; 
} 

- (CGRect)textRectForBounds:(CGRect)bounds 
{ 
    return CGRectMake(bounds.origin.x + self.paddingLeft, bounds.origin.y + self.paddingTop, bounds.size.width - self.paddingLeft - self.paddingRight, bounds.size.height - self.paddingTop - self.paddingBottom); 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds 
{ 
    return [self textRectForBounds:bounds]; 
} 

@end 
+0

我不是OP,但你可以分享如何实现第二个子弹?我期望做同样的 – 2012-03-03 20:20:34

+0

我已经添加了一些示例代码。对我来说就像一个魅力。 – wzs 2012-03-05 14:08:07

最简单的方法是创建一个UIImageView并将UITextField放在上面。

问题解决。

供参考:你可以继承UITextField,但这将是一个庞大而复杂的工作。因为我不会推荐为非标准视图,并且在当前和未来可能会有很多陷阱。

+0

我对上面关于子类化的回答者发表了评论,但唯一的问题是如果你最初使用的是UIColor patternImage?我不明白如何通过自己的方式实现这一目标。 – 2012-03-03 20:21:25