Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制NSTextField中的所有大写字母(Cocoa)_Cocoa_Nstextfield_Capitalization - Fatal编程技术网

强制NSTextField中的所有大写字母(Cocoa)

强制NSTextField中的所有大写字母(Cocoa),cocoa,nstextfield,capitalization,Cocoa,Nstextfield,Capitalization,有没有办法在一个领域强制使用大写字母 我想创建一个文本字段,用于输入邮政编码,并且希望输入的所有邮政编码都使用大写字母 e、 g.N1 3ET代替:N1 3ET 另外,我正在使用一个只接受大写字母的正则表达式(我对正则表达式知之甚少,所以我不想修改它) 谢谢大家! Michael您可以给NSTextField一个大致如下的内容: - (void)controlTextDidChange:(NSNotification *)aNotification{ NSText *fieldEdito

有没有办法在一个领域强制使用大写字母

我想创建一个文本字段,用于输入邮政编码,并且希望输入的所有邮政编码都使用大写字母

e、 g.N1 3ET代替:N1 3ET

另外,我正在使用一个只接受大写字母的正则表达式(我对正则表达式知之甚少,所以我不想修改它)

谢谢大家!


Michael

您可以给NSTextField一个大致如下的内容:

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

它应该捕获文本更改通知和大写文本。

Anq的答案很好,但在可可世界,这就是它的目的。它的工作量大致相同,可以轻松地移植到项目的任何部分(或任何其他项目)


另请参见。

以下是如何在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);

}

迅速解决。作为NSTextField委托的类应包含:

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

上述解决方案的问题是,当我更改UI中的textfield时,光标会移动到字符串的末尾。如果我在文本字段中有一个字符串,像这样

[VCOUVER]

我会将光标放在1:

[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];
    }
}

即,在应用大写字母之前,抓取光标的位置,应用大写字母,然后放回光标。

这只在文本字段结束时编辑,而不是当光标位于文本中间时。