2011-09-03 61 views

回答

5

你能做到這樣,假設_textField設置在您的廈門國際銀行的出口:

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

編輯:

如果你想編寫一個自定義刪除線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]]; 
} 
+0

感謝您的回覆。問題是,在'awakeFromNib'中,我不知道將被插入到文本字段中的文本的長度。事實上,我使用可可綁定和_我從來沒有直接控制文本字段的內容。無論內容如何,​​都沒有辦法刪除標籤? – Dev

+1

我現在明白得更清楚了。 'NSTextFieldCell'只有'font'和'color'屬性。你可以用一個自定義的'NSTextFieldCell'子類來解決這個問題(它不應該太難寫),或者你可以綁定到一個自定義粘連對象,當它的setter被調用時會在你的文本字段上調用'setAttributedStringValue:'綁定。或者你可以完全放棄綁定。這些解決方案都不是特別優雅,但我認爲他們會工作。 – sbooth

+0

感謝子類「NSTextFieldCell」的好主意。我創建了一個名爲'StrikethroughTextFieldCell'的子類,並且我重新實現了'drawInteriorWithFrame:inView:':' - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {[super drawInteriorWithFrame:cellFrame inView:controlView]; NSMutableAttributedString * as = [self.attributedStringValue mutableCopy]; [as addAttribute:NSStrikethroughStyleAttributeName value:(NSNumber *)kCFBooleanTrue range:NSMakeRange(0,as.length)]; [self setAttributedStringValue:as]; }'。然而,不幸的是,不能按預期工作。 – Dev

1

對我來說,它的偉大工程創建自定義NSTextFieldCell和壓倒一切由sbooth的辦法,結合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]; 
}