0

ver.2 の公式 FAQによると、ユーザーが選択した共有者に応じてテキスト/コンテンツをカスタマイズするには、次のものが必要です。

  1. SHKActionSheet からサブクラス化し、dismissWithClickedButtonIndex をオーバーライドします
  2. コンフィギュレーターで新しいサブクラス名を設定します ((Class)SHKActionSheetSubclass; で返します)。

それは私にはうまくいきません。しかし、さらに:私は入れます

NSLog(@"%@", NSStringFromSelector(_cmd));

(Class)SHKActionSheetSubclass で、それが呼び出されたかどうかを確認します。そして、そうではありません ;(( したがって、ShareKit はこの構成オプションを気にしません... 誰かがこれを以前に使用したことがありますか?

ありがとう!

UPD1: ここにいくつかのコードを入れました。 サブクラス ITPShareKitActionSheet は次のようになります。ドキュメントによると、オーバーライドする必要がありますdismissWithClickedButtonIndex:animated:が、クラスが呼び出されたかどうかを追跡するために、次のもオーバーライドしますactionSheetForItem:

+ (ITPShareKitActionSheet *)actionSheetForItem:(SHKItem *)item
{
    NSLog(@"%@", NSStringFromSelector(_cmd));

    ITPShareKitActionSheet *as = (ITPShareKitActionSheet *)[super actionSheetForItem:item];

    return as;
}

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animate
{
    NSLog(@"%@", NSStringFromSelector(_cmd));

    NSString *sharersName = [self buttonTitleAtIndex:buttonIndex];
    [self changeItemForService:sharersName];
    [super dismissWithClickedButtonIndex:buttonIndex animated:animate];
}

そして、ユーザーが「共有」ボタンを押したときにアクションシートを作成するためにコードで行うことは次のとおりです。

- (IBAction)shareButtonPressed:(id)sender
{
    // Create the item to share
    SHKItem *item = [SHKItem text:@"test share text"];

    // Get the ShareKit action sheet
    ITPShareKitActionSheet *actionSheet = [ITPShareKitActionSheet actionSheetForItem:item];

    // Display the action sheet
    [actionSheet showInView:self.view]; // showFromToolbar:self.navigationController.toolbar];
}

このコードを実行したら、[共有] ボタンを押して、ログに 2 行が記録されると予想される共有者を選択します。

  1. actionSheetForItem:- カスタム アクション シートが作成されました
  2. dismissWithClickedButtonIndex:animated:- アクション シートの押されたボタンを処理するためのカスタム メカニズムが呼び出されました。

しかし、何らかの理由で、ログに記録されるのは最初の行だけです。

4

2 に答える 2

0

同じ問題が発生していましたが、突然、サブクラスを正常に呼び出すことができました。

まず、MyConfiguratorは次のように設定されています。

-(Class) SHKActionSheetSubclass{
    return NSClassFromString(@"TBRSHKActionSheet");
}

今私のサブクラス:.hファイル

    #import "SHKActionSheet.h"
    @interface TBRSHKActionSheet : SHKActionSheet

    @end

.m実装オーバーライド:

#import "TBRSHKActionSheet.h"
#import "SHKActionSheet.h"
#import "SHKShareMenu.h"
#import "SHK.h"
#import "SHKConfiguration.h"
#import "SHKSharer.h"
#import "SHKShareItemDelegate.h"

@implementation TBRSHKActionSheet

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
if (self) {
    // Initialization code
}
return self;
}

    + (SHKActionSheet *)actionSheetForItem:(SHKItem *)i
{
        NSLog(@"%@", NSStringFromSelector(_cmd));

    SHKActionSheet *as = [self actionSheetForType:i.shareType];
    as.item = i;
    return as;
}

     - (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
{
   NSInteger numberOfSharers = (NSInteger) [sharers count];

    // Sharers
    if (buttonIndex >= 0 && buttonIndex < numberOfSharers)
    {
        bool doShare = YES;
        SHKSharer* sharer = [[NSClassFromString([sharers objectAtIndex:buttonIndex]) alloc] init];
        [sharer loadItem:item];
        if (shareDelegate != nil && [shareDelegate respondsToSelector:@selector(aboutToShareItem:withSharer:)])
        {
            doShare = [shareDelegate aboutToShareItem:item withSharer:sharer];
        }
        if(doShare)
            [sharer share];
    }

// More
else if ([SHKCONFIG(showActionSheetMoreButton) boolValue] && buttonIndex == numberOfSharers)
{
    SHKShareMenu *shareMenu = [[SHKCONFIG(SHKShareMenuSubclass) alloc] initWithStyle:UITableViewStyleGrouped];
    shareMenu.shareDelegate = shareDelegate;
    shareMenu.item = item;
    [[SHK currentHelper] showViewController:shareMenu];

}

[super dismissWithClickedButtonIndex:buttonIndex animated:animated];
}

最後に、実装ファイルでは、競合を引き起こしていると思われる依存関係があるため、Vilemが示唆しているように、SHKActionSheetの呼び出しを変更していません。

だからこれは私の発信者です(チュートリアルからまっすぐ):

            NSURL *url = [NSURL URLWithString:@"http://getsharekit.com"];
    SHKItem *item = [SHKItem URL:url title:@"ShareKit is Awesome!" contentType:SHKURLContentTypeWebpage];

    // Get the ShareKit action sheet

    SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item];

    // ShareKit detects top view controller (the one intended to present ShareKit UI) automatically,
    // but sometimes it may not find one. To be safe, set it explicitly
    [SHK setRootViewController:self];

    // Display the action sheet
    [actionSheet showFromToolbar:self.navigationController.toolbar];

これは私にとって問題はありません。

于 2013-01-30T01:07:30.617 に答える
0

編集:これを達成するための最良の方法は、を使用することSHKShareItemDelegateです。詳細は、ShareKit の FAQにあります。

于 2012-12-31T20:34:25.140 に答える