Возможно ли, чтобы ShareItem вызывал метод, когда sharekit заканчивает совместное использование? - PullRequest
4 голосов
/ 05 июля 2011

Когда пользователь публикует сообщения в FB или Twitter, я хочу знать, что общий ресурс завершен, или представление было отклонено с x.

Кто-нибудь знает, есть ли в ShareKit встроенный метод делегата или я должен написать свои собственные методы в нем?

Прямо сейчас я использую разделители напрямую, но я могу перейти к использованию всплывающего окна sharekit. Я просто использую двухстрочный код:

    SHKItem *item = [SHKItem text:someText];
    [SHKFacebook shareItem:item];

1 Ответ

4 голосов
/ 14 марта 2012

Я столкнулся с вашей проблемой и нашел решение, возможно, не самое красивое, но оно решает проблему.Существует delagate под названием SHKSharerDelegate, который можно использовать с распространителями для этой цели, поэтому, если вы вызываете распределителей непосредственно из своего кода (без таблицы действий), то вам следует сделать что-то вроде этого:

NSString* mySharerClassName = @"SHKFacebook";
SHKSharer* classItem = (SHKSharer*)[[NSClassFromString(mySharerClassName) alloc] init];
Class sharerClass = [classItem class];

if ( [sharerClass canShare] ){
    [classItem performSelector: @selector(setItem:) withObject: item];
    //Assuming that the class where this code is conforms to the SHKSharerDelegate protocol
    [classItem performSelector: @selector(setShareDelegate:) withObject: self];
    [classItem performSelector: @selector(send)];
}

Если вам нужно использовать ActionSheet, он становится немного сложнее, в основном из-за того, что его не поддерживают, просто перейдите в заголовочный файл ActionSheet (ShareKit / UI / SHKActionSheet.h) и добавьте свойство делегата:

@property (nonatomic, retain) id sharerDelegate;

Обратите внимание, что это не id<SHKSharerDelegate>, попробуйте сделать это, и вы испытаете много боли .Вот почему я сказал, что это не самая красивая.После того как вы добавили и синтезировали свойство, ищите этот метод:

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

И где оно говорит:

id sharer = [sharers objectAtIndex:buttonIndex];
[NSClassFromString(sharer) performSelector:@selector(shareItem:) withObject:item];

Измените его на

id sharer = [sharers objectAtIndex:buttonIndex];

if ( sharerDelegate == nil ){
    [NSClassFromString(sharer) performSelector:@selector(shareItem:) withObject:item];
}else{
    SHKSharer* classItem = [[NSClassFromString(sharer) alloc] init];
    [classItem performSelector: @selector(setItem:) withObject: item];
    [classItem performSelector: @selector(setShareDelegate:) withObject: sharerDelegate];
    [classItem performSelector: @selector(send)];
}

Если выЯ больше постараюсь сделать пост в блоге и отредактирую ответ, чтобы сослаться на него.Надеюсь, я еще смогу кому-нибудь помочь!

...