【问题标题】:Change border "glow" color of NSTextField更改 NSTextField 的边框“发光”颜色
【发布时间】:2013-04-18 01:28:50
【问题描述】:

我在 MainMenu.xib 中有一个 NSText 字段,并且我设置了一个操作来验证它的电子邮件地址。我希望 NSExFields 边框颜色(蓝色发光)在我的操作返回 NO 时为红色,而在操作返回 YES 时为绿色。这是行动:

-(BOOL) validEmail:(NSString*) emailString {
    NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";
    NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern     options:NSRegularExpressionCaseInsensitive error:nil];
    NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
    NSLog(@"%ld", regExMatches);
    if (regExMatches == 0) {
        return NO;
    } else
        return YES;
}  

我现在调用这个函数并设置文本颜色,但我想设置 NSTextField 的发光颜色。

- (void) controlTextDidChange:(NSNotification *)obj{
    if ([obj object] == emailS) {
        if ([self validEmail:[[obj object] stringValue]]) {
            [[obj object] setTextColor:[NSColor colorWithSRGBRed:0 green:.59 blue:0 alpha:1.0]];
            [reviewButton setEnabled:YES];
        } else {
            [[obj object] setTextColor:[NSColor colorWithSRGBRed:.59 green:0 blue:0 alpha:1.0]];
            [reviewButton setEnabled:NO];
        }
    }
}

我对子类化 NSTextField 持开放态度,但我们将不胜感激最简洁的方法!

【问题讨论】:

  • 你有没有想过这个问题?我一直在寻找同样的东西。不知道 Cocoa 中是否有标准的方式来表示无效字段。

标签: cocoa colors border nstextfield


【解决方案1】:

我对 Swift 2 的解决方案是


    @IBOutlet weak var textField: NSTextField!

...

// === set border to red ===
// if text field focused right now
NSApplication.sharedApplication().mainWindow?.makeFirstResponder(self)
// disable following focusing
textField.focusRingType = .None
// enable layer
textField.wantsLayer = true
// change border color
textField.layer?.borderColor = NSColor.redColor().CGColor
// set border width
textField.layer?.borderWidth = 1

【讨论】:

    【解决方案2】:

    解决这个问题的方法是继承NSTextFieldCell 并绘制你自己的焦点环。据我所知,无法告诉系统使用您自己的颜色绘制对焦环,因此您必须调用setFocusRingType:NSFocusRingTypeNone,检查控件在您的绘图方法中是否具有第一响应者状态,如果是用你自己的颜色画一个对焦环。

    如果您决定使用这种方法,请记住对焦环是用户定义的样式(蓝色或石墨色),并且无法保证未来的 OSX 版本不会允许用户将标准颜色更改为红色或绿色。在 OSX 的未来版本中,焦点环的绘制样式也可能会发生变化,此时您必须更新绘制代码才能使事情看起来正确。

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多