2012-08-13 218 views
3

我有一個NSTextView,用戶可以在其中粘貼純文本。NSTextView粘貼:當粘貼「foo」時,如何粘貼「bar」?

當用戶在粘貼板上有「foo」時,我想粘貼「bar」。換句話說,用戶轉到網絡瀏覽器,選擇「foo」,cmd + c,切換到我的NSTextView,cmd + v並在插入點出現「bar」。

請問有沒有人知道如何解決這個問題?

編輯:是否有可能以某種方式使用readSelectionFromPasteboard:type:這個?我只是不知道要重寫的textview的方法體內放置什麼..?

+0

它是一個非常具體的文本替換功能? – 2012-08-13 15:49:12

+0

@DanF:不,不是。爲什麼? – 2012-08-13 15:52:52

+0

這決定了答案的複雜性 – 2012-08-13 15:55:03

回答

8

試試這個。子類化您的文本視圖,並覆蓋粘貼:這種方式:

@implementation RDTextView 

-(void)paste:(id)sender { 
    NSPasteboard *pb = [NSPasteboard generalPasteboard]; 
    NSString *pbItem = [pb readObjectsForClasses: @[[NSString class],[NSAttributedString class]] options:nil].lastObject; 
    if ([pbItem isKindOfClass:[NSAttributedString class]]) 
     pbItem = [(NSAttributedString *)pbItem string]; 

    if ([pbItem isEqualToString:@"foo"]) { 
     [self insertText:@"bar"]; 
    }else{ 
     [super paste:sender]; 
    } 
} 

@end 
+0

謝謝!請問,我還有一個問題:這個會在粘貼板中「銷燬」「foo」,所以如果我粘貼這個textview然後再粘貼到另一個應用程序中,它會粘貼「bar」,對吧? - 是否有可能將這個foo/bar「調整」「本地」保留在我的textview中?我的意思是,不要使用'writeObjects'? – 2012-08-13 21:40:23

+0

@EcirHana是的,這是可能的。看到我編輯的答案。如果「拾取」的「foo」是一個屬性字符串(富文本),而不僅僅是一個痛苦字符串,該版本也會進行替換。 – rdelmar 2012-08-13 21:59:17