24/7 twenty-four seven

iOS/OS X application programing topics.

UITextFieldのテキストをインデントする

UITextFieldの文字の入力位置を調整する方法です。

UITextFieldを継承したクラスを作り、次のメソッドをオーバーライドします。

- (CGRect)textRectForBounds:(CGRect)bounds;
- (CGRect)editingRectForBounds:(CGRect)bounds;

textRectForBounds:が返す値は、表示されるテキスト、およびプレースホルダのテキスト表示位置です。
editingRectForBounds:が返す値は、編集中のテキストの表示位置です。


一文字くらいインデントしたテキストフィールドを作るには次のようにします。

#import <UIKit/UIKit.h>
#import "MyTextField.h"

@interface MyTextField : UITextField
@end

@implementation MyTextField

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
}

- (void)dealloc {
    [super dealloc];
}

- (CGRect)textRectForBounds:(CGRect)bounds {
    return CGRectMake(bounds.origin.x + 16.0f, bounds.origin.y, bounds.size.width, bounds.size.height);
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    return CGRectMake(bounds.origin.x + 16.0f, bounds.origin.y, bounds.size.width, bounds.size.height);
}

@end


こんな感じになります。下のテキストフィールドは入力位置が右にずれているのが分かります。