0

私はこのコードを持っていて、それは働いています:

[_fieldEmail setFont:[UIFont fontWithName:@"ABeeZee-Regular" size:14]];
[_fieldPassword setFont:[UIFont fontWithName:@"ABeeZee-Regular" size:14]];
[_fieldRegisterName setFont:[UIFont fontWithName:@"ABeeZee-Regular" size:14]];
[_fieldRegisterEmail setFont:[UIFont fontWithName:@"ABeeZee-Regular" size:14]];
[_fieldRegisterPassword setFont:[UIFont fontWithName:@"ABeeZee-Regular" size:14]];

[_titleLogin setFont:[UIFont fontWithName:@"Raleway-ExtraLight" size:28]];
[_titleRegister setFont:[UIFont fontWithName:@"Raleway-ExtraLight" size:28]];
[_titleVote setFont:[UIFont fontWithName:@"Raleway-ExtraLight" size:28]];

また、私が持っている各テキストフィールドに左パディングと右パディングを適用するこのコードがあります:

UIView *fieldEmail = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
_fieldEmail.leftViewMode = UITextFieldViewModeAlways;
_fieldEmail.leftView    = fieldEmail;

UIView *fieldPassword = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
_fieldPassword.leftViewMode = UITextFieldViewModeAlways;
_fieldPassword.leftView    = fieldPassword;

UIView *fieldRegisterName = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
_fieldRegisterName.leftViewMode = UITextFieldViewModeAlways;
_fieldRegisterName.leftView    = fieldRegisterName;

UIView *fieldRegisterEmail = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
_fieldRegisterEmail.leftViewMode = UITextFieldViewModeAlways;
_fieldRegisterEmail.leftView    = fieldRegisterEmail;

UIView *fieldRegisterPassword = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
_fieldRegisterPassword.leftViewMode = UITextFieldViewModeAlways;
_fieldRegisterPassword.leftView    = fieldRegisterPassword;

しかし、それは醜いコードだと思います。すべてのテキスト フィールドとラベルを 1 つずつ設定する必要があるためです。これを単純化するより良い方法はありますか?

どうもありがとうございます..

4

4 に答える 4

3

私はこのようにはしません。コードを確認すると、TextField に似たようなパターンがたくさんあります。

UITextField から継承された customTextField を作成しないのはなぜですか? 次に、customTextField クラスで font、leftViewMode、leftView を設定する必要があります。使用するときは、フレームに割り当てるだけです。終わり!

于 2013-09-11T15:38:29.127 に答える
3

2 つの配列を作成します。

NSArray* fields= @[ _fieldEmail, _fieldPassword, _fieldRegisterName, _fieldRegisterEmail, _fieldRegisterPassword ];
NSArray* titles = @[ _titleLogin, _titleRegister, _titleVote ];

次にmakeObjectsPerformSelector:withObject:、すべての配列オブジェクトでメソッド呼び出しを実行するために使用します。

UIFont* font1= [UIFont fontWithName: @"ABeeZee-Regular" size: 14];
UIFont* font2= [UIFont fontWithName:@"Raleway-ExtraLight" size:28];
[fields makeObjectsPerformSelector: @selector(setFont:) withObject: font1];
[titles makeObjectsPerformSelector: @selector(setFont:) withObject: font2];

2 番目のタスクについては、後で使用する必要がある場合は、単純に繰り返しを使用して、作成したUIViewオブジェクトを変更可能な配列に配置できます。それらを名前で呼びたい場合は、辞書も良い考えです:

NSArray* keys= @[ @"fieldEmail", @"fieldPassword", @"fieldRegisterName", @"fieldRegisterEmail", "fieldRegisterPassword" ];
NSMutableDictionary* fieldsDict= [[NSMutableDictionary alloc] init];
for(NSString* key in keys) {
    UIView* field= [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
    field.leftViewMode= UITextFieldViewModeAlways;
    field.leftView= field;  // I hope that this property is weak
    [fieldsDict setObject: field forKey: key];
}
于 2013-09-11T15:34:13.587 に答える
3

iOS 5 以降では、UIAppearance API を使用して、コントロールに一貫したスタイルを与えることができます。どの iOS フレームワークをターゲットにしていますか?

また

Brain で提案されているように、カスタム TextField を作成し、UITextField の代わりにそれを使用できます。カスタム TextField はもちろん UITextField から継承されますが、必要に応じてさまざまなプロパティが変更されます。

于 2013-09-11T15:43:43.473 に答える
1

すべてのサブビューをループして、それらが のインスタンスUITextFieldまたはサブクラスであるかどうかを確認することができますUITextField。そうである場合は、font プロパティを設定できます。
これを行う方法を示すために、いくつかのサンプルコードを簡単に書きました。

for (UIView *subview in [[self view] subviews]) {
    if ([subview isKindOfClass:[UITextField class]]) {
        UITextField *textField = (UITextField *)subview;
        [textField setFont:[UIFont fontWithName:@"ABeeZee-Regular" size:14.f]];
    }
}

このコードは の「最も近い」子のみをループするため[self view]、階層のより深いビューを変更しないことに注意してください。

于 2013-09-11T15:30:03.353 に答える