Mac OS X: зачеркивание текста в метке (NSTextField) - PullRequest
5 голосов
/ 03 сентября 2011

Можно ли зачеркнуть текст в метке (NSTextField)?

Я пытался использовать панель шрифтов, но, очевидно, они игнорируются, когда я пытаюсь установить их:

enter image description here

enter image description here

Ответы [ 2 ]

6 голосов
/ 03 сентября 2011

Вы можете сделать это следующим образом, предполагая, что _textField установлено как выход в вашей xib:

- (void) awakeFromNib
{
  NSMutableAttributedString *as = [[_textField attributedStringValue] mutableCopy];
  [as addAttribute:NSStrikethroughStyleAttributeName value:(NSNumber *)kCFBooleanTrue range:NSMakeRange(0, [as length])];
  [_textField setAttributedStringValue:[as autorelease]];
}

Edit:

Если вы хотите написать вместо этого собственный подкласс зачеркивания NSTextFieldCell, единственный метод, который необходимо переопределить, это setStringValue:

- (void) setStringValue:(NSString *)aString
{
  NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:aString];
  [as addAttribute:NSStrikethroughStyleAttributeName value:(NSNumber *)kCFBooleanTrue range:NSMakeRange(0, [as length])];
  [self setAttributedStringValue:[as autorelease]];
}
1 голос
/ 11 июня 2013

Для меня это прекрасно работает, объединяя подход с помощью sbooth создания пользовательского NSTextFieldCell и переопределения drawInteriorWithFrame:inView:, как указано ниже:

- (void) drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    [self setAttributedStringFromStringValue];
    [super drawInteriorWithFrame:cellFrame inView:controlView];
}


- (void) setAttributedStringFromStringValue {  // add strikethrough
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.stringValue];
    [attributedString addAttribute:NSStrikethroughStyleAttributeName value:(NSNumber *)kCFBooleanTrue range:NSMakeRange(0, attributedString.length)];
    [self setAttributedStringValue:attributedString];
}
...