0

stackOverflowの他のすべての投稿は、プログラムではなくIDEで作成されたUITextFieldを参照しているため、問題の解決策を見つけることができません。

UITextField内部 にカスタムを作成しました(void)viewDidLoad。これをプログラムで作成したので、プロパティにアクセスできleftViewます。

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 66, screenAdj, 30)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font=[UIFont fontWithName:@"Helvetica" size:14];
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    textField.returnKeyType = UIReturnKeyDone;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    [textField addTarget:self action:@selector(textFieldShouldReturn:)forControlEvents:UIControlEventEditingDidEndOnExit];
    textField.text=[defaults stringForKey:@"username"];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
    label.font=[UIFont fontWithName:@"Helvetica" size:14];
    label.text = @"Your name";
    label.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];
    textField.leftViewMode = UITextFieldViewModeAlways;
    textField.leftView = label;

また、TextField実装内の最大文字数を制限したいと思います。

- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;

    NSUInteger newLength = oldLength - rangeLength + replacementLength;

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;

    return newLength <= MAX_LENGTH_USERNAME || returnKey;
}

しかし、textFieldが上記の関数を「認識」していないことに気づきました。

[textField addTarget:self action:@selector(...

しかし、運はありません。何か助けはありますか?

4

1 に答える 1

2

UITextFieldsデリゲートプロトコルに準拠するようにViewControllerに指示する必要があります。(.h)<UITextFieldDelegate>で、「UIViewController」の直後に追加し、テキストフィールドを設定するときに、そのデリゲートをself次のように設定します。

[textField setDelegate:self];

次に、先に進んでこの行を削除できます

[textField addTarget:self action:@selector(...

これを使用してを呼び出すと仮定しますshouldChangeCharactersInRange。デリゲートを設定したので、このメソッドが自動的に呼び出されます。

于 2012-11-26T15:30:22.700 に答える