NSTextFieldに大文字を強制する方法はありますか?
郵便番号を入力するためのテキストフィールドを作成し、入力するすべての郵便番号に大文字を使用するようにします。
例:n13etの代わりにN13ET
また、大文字のみを受け入れる正規表現を使用しています(正規表現についてはほとんど知らないため、変更することに熱心ではありません)。
ありがとうございました!
マイケル
NSTextFieldに大文字を強制する方法はありますか?
郵便番号を入力するためのテキストフィールドを作成し、入力するすべての郵便番号に大文字を使用するようにします。
例:n13etの代わりにN13ET
また、大文字のみを受け入れる正規表現を使用しています(正規表現についてはほとんど知らないため、変更することに熱心ではありません)。
ありがとうございました!
マイケル
NSTextFieldに、次の行に沿った何かを持つデリゲートを与えることができます。
- (void)controlTextDidChange:(NSNotification *)aNotification{
NSText *fieldEditor = [[aNotification userInfo] objectForKey:@"NSFieldEditor"];
[fieldEditor setString:[[fieldEditor string] uppercaseString]];
}
テキスト変更通知をキャッチし、テキストを大文字にする必要があります。
Anqの答えはうまく機能しますが、Cocoaの世界では、これがNSFormatterの目的です。これはほぼ同じ量の作業であり、プロジェクトの任意の部分(または他のプロジェクト)に簡単に移植できます。
Cocoaのデータフォーマットプログラミングガイドも参照してください。
迅速なソリューション。NSTextFieldデリゲートであるクラスには、次のものが含まれている必要があります。
override func controlTextDidChange(obj: NSNotification)
{
if let info = obj.userInfo, text = info["NSFieldEditor"] as? NSText,
string = text.string
{
text.string = string.uppercaseString
}
}
これがSwiftでのAnqの答えと同じことをする方法です
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
}
NStexfieldをフックして、以下よりもIBで委任します。
- (void)controlTextDidChange:(NSNotification *)aNotification{
editField = [aNotification object];
NSString* value = [editField stringValue];
[editField setStringValue:[value uppercaseString]];
//NSLog(@"editField%@", editField.stringValue);
}
上記の解決策で私が抱えていた問題は、UIのテキストフィールドに変更を加えると、カーソルが文字列の最後に移動することです。したがって、テキストフィールドに次のような文字列がある場合
[VCOUVER]
カーソルを1に置きます。
[V | COUVER]
小文字の「a」を入力すると、次のようになります。
[VACOUVER | ]
これに気づかずに、「n」と入力して次のようにします。
[VACOUVERN | ]
がらくた...OK、これが私の修正です:
-(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];
}
}
つまり、大文字を適用する前に、カーソルの位置を取得し、大文字を適用してから、カーソルを元に戻します。