27

UITextFieldaのテキストの左余白を 10 px にしたい。それを行う最善の方法は何ですか?

4

9 に答える 9

44

クラスを拡張しUITextField、2 つのメソッドをオーバーライドすることでそれを行うことができます。

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

コードは次のとおりです。

のインターフェースMYTextField.h

@interface MYTextField : UITextField

@end

での実装MYTextField.m

@implementation MYTextField

static CGFloat leftMargin = 28;

 - (CGRect)textRectForBounds:(CGRect)bounds
{
    bounds.origin.x += leftMargin;

    return bounds;
}

 - (CGRect)editingRectForBounds:(CGRect)bounds
{
    bounds.origin.x += leftMargin;

    return bounds;
}
@end
于 2011-05-11T12:45:14.470 に答える
21

以前のコメントで説明したように、この場合の最善の解決策はUITextField、カテゴリを使用する代わりにクラスを拡張することです。これにより、目的のテキストフィールドで明示的に使用できます。

#import <UIKit/UIKit.h>

@interface MYTextField : UITextField

@end


@implementation MYTextField

- (CGRect)textRectForBounds:(CGRect)bounds {
    int margin = 10;
    CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height);
    return inset;
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    int margin = 10;
    CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height);
    return inset;
}

@end

カテゴリは、既存のメソッドをオーバーライドするのではなく、既存のクラスに新しい関数を追加することを目的としています。

于 2012-03-28T05:03:37.033 に答える
13
UITextField * textField = [[UITextField alloc]init];
[textField setDelegate:self];
[textField setFrame:CGRectMake(170,112,140,25)];
[textField setBorderStyle:UITextBorderStyleNone];
[textField setBackgroundColor:[UIColor clearColor]];
[self.View addSubview:noofChildTField];

UIView *paddingView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)] autorelease];
textField.leftView = paddingView;
textField.leftViewMode = UITextFieldViewModeAlways;

このコードを試してください

于 2013-03-23T06:11:19.540 に答える
11

Swift 3 の場合:

UITextFieldたとえば、usernameTextFieldのアウトレットを作成します。次に、次のコードをviewDidLoad()

let paddingView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 20))
usernameTextField.leftView = paddingView
usernameTextField.leftViewMode = .always

width: 5より多くのスペースが必要な場合は、より大きな値に変更してください。

于 2017-01-09T12:00:56.037 に答える
1

オーバーライドすることでほぼ到達しました- (CGRect)textRectForBounds:(CGRect)bounds。今の問題は、TextField が編集モードに入ると、左マージンがゼロにリセットされることです.......

@implementation UITextField(UITextFieldCatagory)

- (CGRect)textRectForBounds:(CGRect)bounds {
    CGRect theRect=CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width-10, bounds.size.height);
    return theRect;


}
于 2011-04-15T09:17:00.330 に答える
-3

これを試すことができます

TextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
TextField.textAlignment = UITextAlignmentCenter;
于 2011-04-15T09:17:26.863 に答える