强制NSTextField中的所有大写字母(Cocoa)
有没有办法在一个领域强制使用大写字母 我想创建一个文本字段,用于输入邮政编码,并且希望输入的所有邮政编码都使用大写字母 e、 g.N1 3ET代替:N1 3ET 另外,我正在使用一个只接受大写字母的正则表达式(我对正则表达式知之甚少,所以我不想修改它) 谢谢大家!强制NSTextField中的所有大写字母(Cocoa),cocoa,nstextfield,capitalization,Cocoa,Nstextfield,Capitalization,有没有办法在一个领域强制使用大写字母 我想创建一个文本字段,用于输入邮政编码,并且希望输入的所有邮政编码都使用大写字母 e、 g.N1 3ET代替:N1 3ET 另外,我正在使用一个只接受大写字母的正则表达式(我对正则表达式知之甚少,所以我不想修改它) 谢谢大家! Michael您可以给NSTextField一个大致如下的内容: - (void)controlTextDidChange:(NSNotification *)aNotification{ NSText *fieldEdito
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];
}
}
即,在应用大写字母之前,抓取光标的位置,应用大写字母,然后放回光标。
这只在文本字段结束时编辑,而不是当光标位于文本中间时。