2013-08-20 3 views
0

Я swizzling Копия: и Вставить: метод UIResponder. Мне нужно написать скопированный контент в частную карточку.Swizzling Метод копирования UIResponder

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

Как я могу написать скопированную строку для картона. Параметр, который я получаю, имеет идентификатор типа. Если я конвертирую его в NSString, это будет неправильно, потому что это отправитель, который вызывает этот метод (UIMenuController).

+0

Можете ли вы предоставить немного больше контекста? Какие методы вы используете? Что они делают? – Florian

ответ

0

Если я понимаю, что вы исправить, вы хотите заменить UIResponder's-copy: с кодом в вас Q. (И делать то же самое с -paste:.)

Это ответ на Q. Но есть некоторые комментарии в конце:

  • Если вы подпрыгиваете методом, то я укажу на приемник сообщения. В вашем случае это пример UIResponder. Поэтому вам нужно взять данные с помощью self. Как вы можете это сделать? Не в общем, потому что:

  • -copy: может содержать больше, чем «Поместить мои данные в картон». Это метод. Код там может иметь дело с другими вещами, которые вы не можете не знать. Поэтому вы не можете легко заменить его.

  • Из-за этого -copy: обычно перезаписывается в подклассах. (Я думаю, что он ничего не делает в своей реализации UIResponder.) Swizzling -copy: в UIResponder не изменит никакого поведения в экземпляре подкласса. Вы знакомы с концепцией responder chain?

Вероятно, есть лучшие пути для достижения своей цели:

  • Если вы действительно хотите сделать некоторые swizzling, потому что это круто, я бы предпочел +generalPasteboard (UIPasteboard).

  • Butmaybe Вы должны описать свою конечную цель более подробно. Вероятно, есть совершенно другой способ достичь этого.

+0

Если я понимаю, по умолчанию весь скопированный контент в приложении или вне приложения записывается в generalPasteboard. – chandvoid

+0

Что я пытаюсь сделать, внутри приложения, если что-то скопировано или вставлено, оно должно пройти через мою частную карточку. Итак, всякий раз, когда я копирую что-то в своем приложении, он должен быть написан на моем личном паспорте не на общем паспорте. Причина, по которой я использую метод «Копировать»: всякий раз, когда мы копируем что-то в приложении, этот метод будет вызван. Как я мог добиться этого лучше? – chandvoid

+0

Как я уже сказал в своем ответе: Мне кажется, что это проще, если вы swizzle + generalPasteboard и доставляете пользовательский подкласс. –

Смежные вопросы