UITextField custom background view and shifting text

感情迁移 提交于 2019-11-30 15:02:15

I think you could use the leftView property for this.

You can add a leftView and rightView to a UITextfield. These views can be used to display an icon, but if it's an empty view it'll just take up space, which is what you want.

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];
Jimit

Another Soultion:

In your appDelegate.m file write the following code at the top

@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

Just FYI, but I had the same problem and finally realized that there's also a editingRectForBounds: method. The control uses that one when you're initially typing stuff into the field. If it has a value and is no longer in editing mode, it then uses textRectForBounds: to decide where to draw the text.

I've not tried Thomas's method, but just to clarify Sean's answer, this has worked for me:

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

Thanks.

Just a heads up, there is a LAZY EASY WAY for those of us who use the Xcode interface builder:

  • easier: put a UIImageView behind a text field

  • easiest: change the border style on your UITextView to any style except the far right "graphical circle", then add an image as a background. The image takes precedence over the graphic, but you still get the padding needed for a normal image background.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!