2014-02-26 2 views
1

TextField의 글자 수 한도를 설정해야합니다. 나는이 answer을 따라 갔고 한계를 설정할 수있었습니다. 하지만 이제는 엔터를 누르면 모든 문자가 지워집니다. 무엇이 잘못 되었습니까?한계를 NSTextField로 설정하십시오.

- (BOOL)isPartialStringValid:(NSString *__autoreleasing *)partialStringPtr 
     proposedSelectedRange:(NSRangePointer)proposedSelRangePtr 
       originalString:(NSString *)origString 
     originalSelectedRange:(NSRange)origSelRange 
      errorDescription:(NSString *__autoreleasing *)error { 
    if ([*partialStringPtr length] > maxLength) 
     return NO; 
    else 
     return YES; 
} 

- (NSString *)stringForObjectValue:(id)obj { 
    return (NSString*) obj; 
} 

- (BOOL)getObjectValue:(out __autoreleasing id *)obj 
      forString:(NSString *)string 
     errorDescription:(out NSString *__autoreleasing *)error { 
    return YES; 
} 

- (NSAttributedString *)attributedStringForObjectValue:(id)obj 
           withDefaultAttributes:(NSDictionary *)attrs { 
    return (NSAttributedString*) obj; 
} 

답변

4

NSTextField의 위임자로 자신을 설정하는 방법에 대해이 위임 방법을 구현 하시겠습니까?

- (void)textDidChange:(NSNotification *)aNotification 

텍스트가 너무 긴지 확인한 다음 잘라낼 수 있습니다.

NSTextField *textField = (NSTextField *)[aNotification object]; 
if ([textField.stringValue length] > maxLength) 
{ 
    textField.stringValue = [textField.stringValue substringWithRange:NSMakeRange(0,maxLength)]; 
} 
+0

예는 'controlTextDidChange'를 사용하여 끝났지 만 대신 NSFormatter 클래스를 사용하여 나에게 옳은 것처럼 보였습니다. – user88975

+0

NSFormatter에 대한이 스레드 확인 (http://stackoverflow.com/questions/827014/how-to-limit-nstextfield-text-length-and-keep-it-always-upper-case) –

관련 문제