2013-08-20 63 views
0

我在swizzling複製:粘貼:UIResponder的方法。 我必須將複製的內容寫入私人粘貼板。UIResponder的Swizzling複製方法

- (void)copyToPrivatePasteboard:(id)sender 
{ 
    UIPasteboard *privatePasteboard = [self getPrivatePasteboard]; 
    [privatePasteboard setString:@""];//How to get the copied string to store in pasteboard. 
} 

如何將複製的字符串寫入粘貼板。我得到的參數是id類型。 如果我將它轉換爲NSString,它將不正確,因爲它是調用此方法的發件人(UIMenuController)。

+0

您能否提供更多的上下文?你在玩什麼方法?他們在做什麼? – Florian

回答

0

如果我理解你正確,你想在您更換UIResponder's-copy:的代碼Q.(以及-paste:做同樣的事情。)

這是回答你問:但也有一些評論在結尾處:

  • 如果調整方法,自我將指向消息的接收者。在你的情況下,它是UIResponder的實例。所以你必須使用self來獲取數據。你怎麼能這樣做?不一般,因爲:

  • -copy:可以包含超過「將我的數據放到粘貼板」。這是一種方法。那裏的代碼可以處理其他你不可能知道的事情。所以你不能輕易取代它。

  • 由於這個-copy:通常在子類中被覆蓋。 (我認爲它在其UIResponder實現中沒有做任何事情。)在UIResponder中使用Swizzling -copy:不會更改子類實例中的任何行爲。您是否熟悉responder chain的概念?

也許有更好的方式來實現自己的目標:

  • 如果你真的想要做一些交叉混合,因爲它很酷,我寧願+generalPasteboardUIPasteboard)。

  • Butmaybe你應該描述你的最終目標與更多細節。可能有完全不同的方式來達到它。

+0

如果我明白,默認情況下,應用程序中或應用程序外部的所有複製內容都將寫入generalPasteboard。 – chandvoid

+0

我想要做的是,在應用程序內部,如果任何東西被複制或粘貼,它應該通過我的私人粘貼板。所以,每當我在我的應用程序中複製一些東西時,它應該寫入我的私人粘貼板而不是通用粘貼板。我使用Copy:方法的原因是,無論何時我們在應用程序中複製某些內容,都會調用此方法。我怎麼能做到這一點更好? – chandvoid

+0

正如我在我的回答中所說:對我來說,如果使用swizzle + generalPasteboard並提供自定義子類,那麼對我來說似乎更容易。 –