2009-11-25 5 views

답변

-1

방금 ​​같은 문제가있었습니다. textFieldDidBeginEditing : 호출 내에서 속성을 변경하려고했습니다.

속성 변경을 textFieldShouldBeginEditing : move로 변경하면 문제가 해결됩니다.

+0

내가 말한 것처럼 시도했지만 작동하지 않았습니다. – cloosen

0

속성에 입력 한 텍스트를 저장하십시오. 대리인의

NSString *_password; 

다음 : 예를 들어 textField.text = _password;

0

textFieldDidBeginEditing:(UITextField *)textField 

할당 나는 이것에 대한의 UITextField를 서브 클래스. 나는 (오프에 보안 항목을 켜고 용)의 UITextField를 마스킹 화면에 별도의 제어가 그래서 나에게 문제를 해결하기 위해이 더 적절한 장소였다 : 이것은 나를 위해 작동

@interface ZTTextField : UITextField { 
    BOOL _keyboardJustChanged; 
} 
@property (nonatomic) BOOL keyboardJustChanged; 
@end 

@implementation ZTTextField 
@synthesize keyboardJustChanged = _keyboardJustChanged; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     _keyboardJustChanged = NO; 
    } 
    return self; 
} 

- (void)insertText:(NSString *)text { 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 
    if (self.keyboardJustChanged == YES) { 
     BOOL isIOS7 = NO; 
     if ([[UIApplication sharedApplication] respondsToSelector:@selector(backgroundRefreshStatus)]) { 
      isIOS7 = YES; 
     } 
     NSString *currentText = [self text]; 
     // only mess with editing in iOS 7 when the field is masked, wherein our problem lies 
     if (isIOS7 == YES && self.secureTextEntry == YES && currentText != nil && [currentText length] > 0) { 
      NSString *newText = [currentText stringByAppendingString: text]; 
      [super insertText: newText]; 
     } else { 
      [super insertText:text]; 
     } 
     // now that we've handled it, set back to NO 
     self.keyboardJustChanged = NO; 
    } else { 
     [super insertText:text]; 
    } 
#else 
    [super insertText:text]; 
#endif 
} 

- (void)setKeyboardType:(UIKeyboardType)keyboardType { 
    [super setKeyboardType:keyboardType]; 
    [self setKeyboardJustChanged:YES]; 
} 

@end 
0

가 : 위해 FALSE 반환을 텍스트 뷰가 변경되지 않도록하고 변경 사항을 직접 설정하십시오.

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString *newContent = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    [textField setText:newContent]; 
    return FALSE; 
} 
관련 문제