2010-01-09 2 views
3

NSTextField에서 대문자를 강제로 사용할 수 있습니까?NSTextField (Cocoa)에서 모든 대문자를 강제로 입력하십시오.

포스트 코드를 입력 할 텍스트 필드를 만들고 모든 포스트 코드에 대문자를 사용하고 싶습니다.

N1 3ET 대신 : N1 3et

또한, 난 단지 자본을 받아들이는 정규 표현식 (I 정규 표현식에 대해 거의 알고, 그래서 그것을 수정에 대한 예리한 아니에요)

가 감사를 사용하고 있습니다!

마이클

답변

6

당신의 라인을 따라 뭔가로 NSTextField있는 delegate을 줄 수 :

- (void)controlTextDidChange:(NSNotification *)aNotification{ 
    NSText *fieldEditor = [[aNotification userInfo] objectForKey:@"NSFieldEditor"]; 
    [fieldEditor setString:[[fieldEditor string] uppercaseString]]; 
} 

그것은 텍스트 변경 알림을 잡아 텍스트를 대문자로한다.

+2

텍스트 필드의 끝에서 편집 할 때만 작동하지만 커서가 텍스트의 중간에있는 경우에는 편집 할 수 없습니다. – Zaggo

2

Anq의 대답은 잘 작동하지만 코코아 세계에서 이것은 NSFormatter을 위해 만들어졌습니다. 이는 거의 동일한 양의 작업이며 프로젝트 (또는 다른 프로젝트)의 일부로 쉽게 이식 할 수 있습니다.

Data Formatting Programming Guide For Cocoa도 참조하십시오.

- (void)controlTextDidChange:(NSNotification *)aNotification{ 
    editField = [aNotification object]; 
    NSString* value = [editField stringValue]; 
    [editField setStringValue:[value uppercaseString]]; 
    //NSLog(@"editField%@", editField.stringValue); 

} 
0

는보다 IB에 위임 할 스위프트

override func controlTextDidChange(obj: NSNotification!) { 
    //Make the username all caps to match the PM 
    var infoDictionary:Dictionary = obj.userInfo! as Dictionary 
    var text:NSText = infoDictionary["NSFieldEditor"] as NSText; 
    text.string = text.string.uppercaseString 
} 
0

후크 NStexfield에 Anq의 대답과 같은 일을 수행하는 방법이다. NSTextField있는 위양이 포함되어야입니다 클래스 :

override func controlTextDidChange(obj: NSNotification) 
{ 
    if let info = obj.userInfo, text = info["NSFieldEditor"] as? NSText, 
     string = text.string 
    { 
     text.string = string.uppercaseString 
    } 
} 
2

스위프트 솔루션 : 여기

0

나는 위의 솔루션을했다 문제는 제가 UI의 텍스트 필드를 변경했을 때, 커서가 문자열의 끝으로 이동 것입니다. 나는 1에서이

[VCOUVER]

내가 배치 할 내 커서 같은 텍스트 필드에 문자열을했다 그래서 만약 :

[V | COUVER]

와는 소문자 문자를 입력 'a'이면 다음과 같이됩니다.

[VACOUVER | ]

이 몰래, 나는 'N'을 입력하고 얻을 것이다 :

[VACOUVERN을 | 이다

-(void)controlTextDidChange:(NSNotification *)obj { 
    if([obj.object isEqualTo:self.locationTextField]) { 
     NSText *fieldEditor = [[obj userInfo] objectForKey:@"NSFieldEditor"]; 
     NSRange rng = [fieldEditor selectedRange]; 
     [fieldEditor setString:[[fieldEditor string] uppercaseString]]; 
     [fieldEditor setSelectedRange:rng]; 
    } 
} 

가, 대문자를 적용하기 전에, 커서의 위치를 ​​잡아 대문자를 적용하고 다시 커서를 넣어 :]

쓰레기 ... OK, 여기 내 수정합니다.