当sharekit完成共享时,是否可以将ShareItem调用为方法?

时间:2011-07-04 21:29:44

标签: iphone ios delegates sharekit

当用户发布到FB或Twitter时,我想知道共享已完成,或者视图已被x解除。

有没有人知道ShareKit中是否内置了委托方法,或者我是否必须在其中编写自己的方法?

现在我直接使用共享者,但我可能会切换到使用sharekit弹出窗口。我只是使用两行代码:

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

1 个答案:

答案 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)];
}

如果您对此更感兴趣,我会尽快发布博客文章并编辑答案以引用它。 希望我仍然可以帮助别人!