当用户发布到FB或Twitter时,我想知道共享已完成,或者视图已被x解除。
有没有人知道ShareKit中是否内置了委托方法,或者我是否必须在其中编写自己的方法?
现在我直接使用共享者,但我可能会切换到使用sharekit弹出窗口。我只是使用两行代码:
SHKItem *item = [SHKItem text:someText];
[SHKFacebook shareItem:item];
答案 0 :(得分:4)
我遇到了你的问题并提出了一个解决方案,也许不是最漂亮的解决方案,但确实解决了这个问题。有一个名为SHKSharerDelegate的delagate,它可以与这个purpouse的共享者一起使用,所以如果你直接从你的代码中调用共享者(没有行动表),那么你应该做这样的事情:
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)];
}
如果您对此更感兴趣,我会尽快发布博客文章并编辑答案以引用它。 希望我仍然可以帮助别人!