4

NSTextFieldに大文字を強制する方法はありますか?

郵便番号を入力するためのテキストフィールドを作成し、入力するすべての郵便番号に大文字を使用するようにします。

例:n13etの代わりにN13ET

また、大文字のみを受け入れる正規表現を使用しています(正規表現についてはほとんど知らないため、変更することに熱心ではありません)。

ありがとうございました!

マイケル

4

6 に答える 6

7

NSTextFieldに、次の行に沿った何かを持つデリゲートを与えることができます。

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

テキスト変更通知をキャッチし、テキストを大文字にする必要があります。

于 2010-01-10T00:29:14.860 に答える
2

Anqの答えはうまく機能しますが、Cocoaの世界では、これがNSFormatterの目的です。これはほぼ同じ量の作業であり、プロジェクトの任意の部分(または他のプロジェクト)に簡単に移植できます。

Cocoaのデータフォーマットプログラミングガイドも参照してください。

于 2010-01-10T16:54:23.283 に答える
2

迅速なソリューション。NSTextFieldデリゲートであるクラスには、次のものが含まれている必要があります。

override func controlTextDidChange(obj: NSNotification) 
{
    if let info = obj.userInfo, text = info["NSFieldEditor"] as? NSText,
        string = text.string
    {
        text.string = string.uppercaseString
    }
}
于 2015-08-13T23:35:05.463 に答える
0

これが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
}
于 2014-09-19T20:53:54.400 に答える
0

NStexfieldをフックして、以下よりもIBで委任します。

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

}
于 2015-06-03T12:22:12.193 に答える
0

上記の解決策で私が抱えていた問題は、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];
    }
}

つまり、大文字を適用する前に、カーソルの位置を取得し、大文字を適用してから、カーソルを元に戻します。

于 2016-04-07T18:30:10.873 に答える