1

iOS ゲームに ShareKit を統合しようとしています。

すべてが正常に機能し、アクションシートが表示され、それを操作できますが、共有キットのアクションが終了したときに (アクションシートを閉じるかアクションを終了して)、アプリにフォーカスを戻すことができません。

私はいくつかの方法で試しましたが、どれもうまくいきました。何が起こっていますか?私はプロのプログラマーではないので、何かが欠けていると思います。

私は

これは私の.hです

#import <UIKit/UIKit.h>
#import "SHK.h"
#import "SHKConfiguration.h"

@interface SocialWrapper: UIViewController{
}

- (id) init;
- (void) open;
- (void) dealloc;

@end

そしてM

#import "SocializeWrapper.h"

@implementation SocialWrapper

- (id) init {
    self=[super init];

    DefaultSHKConfigurator *configurator = [[DefaultSHKConfigurator alloc] init];
    [SHKConfiguration sharedInstanceWithConfigurator:configurator];

    [SHK flushOfflineQueue];
    return self;
}

- (void) open
{  
    NSString *someText = @"Hello Earth!";
    SHKItem *item = [SHKItem text:someText];

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

    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    [window addSubview:self.view];

    [SHK setRootViewController:self];
    [actionSheet showInView:self.view];
}

- (void) dealloc {
     NSLog(@"SHK dealloc");
    [self release];
    [super dealloc];
}

@end

このラッパーを使用して呼び出しています

#import "SocializeWrapper.h"

SocialWrapper *socialize;

void SHKinit(void) {
    NSLog(@"SHK Init");    
    socialize = [[SocialWrapper alloc] init];  
}


void SHKopenWeb(void){
    NSLog(@"SHK Open actionsheet"); 
    [socialize open];
}

私は ios 5、xcode 4.3.2、および git の最新のシェアキット バージョンを使用しています。

アクションシートが閉じられたら、SocialWrapper を却下する必要があると思いますが、そのイベントをキャプチャする方法、またはこれが正しいかどうかさえわかりません。私は立ち往生しています。

どんな助けでも大歓迎です。

アップデート

コメントがアドバイスしたように、コントローラーはカテゴリにあり、アクションシート デリゲートを使用して、キャンセルのアクションシート ボタンをクリックするとフォーカスを取り戻すことができます。アクションが終了またはキャンセルされても、問題は解決しません。そのイベントをキャプチャする方法がわかりません。

これは私のカテゴリコードです:

#import "SocialWrapper.h"

@implementation UIViewController (SocialController)


-(void) loadconfig
{
    DefaultSHKConfigurator *configurator = [[DefaultSHKConfigurator alloc] init];
    [SHKConfiguration sharedInstanceWithConfigurator:configurator];

    [SHK flushOfflineQueue];
}

- (void) open
{  
    NSLog(@"Opening social button");  

    NSString *someText = @"Monkey Armada rules!";
    SHKItem *item = [SHKItem text:someText];

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

    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    [window addSubview:self.view];

    [actionSheet setDelegate:self];

    [SHK setRootViewController:self];
    [actionSheet showInView:self.view];
}

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
      NSLog(@"SHK actionsheet dissmiss with button %d", buttonIndex); 
     if(buttonIndex == 4)
     {
        NSLog(@"SHK close actionsheet");
        [self dismissViewControllerAnimated:YES completion:nil];
        [self.view removeFromSuperview];
     }
}
@end
4

1 に答える 1

0

SHKActionSheet は UIActionSheet のサブクラスであるため、そのクラスのデリゲートを self に設定して、解任がいつ発生するかを知ることができます。

また、[セルフリリース]; dealloc では、リリースが何をするかについての完全な誤解です。dealloc にいる場合、self を解放しても何も起こりません メモリ管理のルールを学びます。

[window addSubview:self.view] は非推奨であることも警告する必要があります。これを行うべきではありません。実際、各View Controllerがそのコードを簡単に記述できるはずの共有キットのものをラップする理由はわかりません。さらに悪いことに、コードを毎回書き直したくない場合は、そのコードを UIViewController のカテゴリに入れることができます。

于 2012-04-16T13:37:15.680 に答える