2012-11-26 6 views
0

stackOverflow의 다른 모든 게시물은 프로그래밍 방식으로 만들지 않고 IDE로 만든 UITextField를 참조하기 때문에 문제에 대한 해결책을 찾을 수 없습니다.사용자 지정 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; 

는 또한 구현하는 텍스트 필드 내부의 최대 문자를 제한하려면 :

- (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은 "참조"위의 function.Tried

[textField addTarget:self action:@selector(... 
하지 않는 것을 깨달았다

행운은 없습니다. 도움이 되었습니까?

+0

결국 가장 중요한 코드 조각을 왜 자르셨습니까? [tff addTarget : 자기 행동 : @selector (변경됨 :) forControlEvents : UIControlEventEditingChanged]; 너가 필요한거야. – jimpic

+0

시도 textField.delegate = 자기; 그리고 viewcontroller implemets shouldChangeCharactersInRange; – zt9788

+0

Jimpic 그것은 작동하지 않았다. 그러나 나는 나의 해결책 (어쨌든 덕분에)을 얻었다. – Theodoros80

답변

2

UITextFields 위임 프로토콜을 준수하도록보기 컨트롤러에 알려야합니다. 당신의 (.H)에서 바로 "UIViewController에"후 <UITextFieldDelegate>을 추가하고 설정할 때 텍스트 필드는 self에의 위임을 설정 : 다음

[textField setDelegate:self]; 

당신이 가서이 줄을 제거 할 수 있습니다

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

shouldChangeCharactersInRange에 전화를 걸었다 고 가정합니다. 위임을 설정 했으므로이 메서드는 자동으로 호출됩니다.

+0

효과가있었습니다! 나는 이것을 5 분 안에 받아 들일 것이다! 다들 감사 해요! – Theodoros80