3

タブ付き ios5 アプリケーションの 2 つのバージョンがあります。1 つはストーリーボードを使用して作成され、もう 1 つは xib ファイルを使用して作成されます。UITabBarControllerDelegateストーリーボード バージョンはメソッドを呼び出しませんdidSelectViewController(xib バージョンは呼び出します)。絵コンテに何かが (私は思うに) 欠けていますが、何がわかりません。質問を組み立てる別の方法はUITabBarController、ストーリーボードによってインスタンス化されたオブジェクトをどのように参照できるかということです。

ご協力いただきありがとうございます。

EDIT:タブバーコントローラデリゲートが設定されています:

AppDelegate.h で:

@interface MyAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
@property (strong, nonatomic) UITabBarController *tabBarController;

AppDelegate.m で:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.tabBarController.delegate = self;
    return YES;
}

その後、AppDelegate.m でデリゲート メソッドは次のようになります。

- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"Got Here");
}

NSLog 出力は表示されません。問題は、ストーリーボードによってインスタンス化されたタブ バー コントローラー オブジェクトを正しく参照していないことです。それ、どうやったら出来るの?

4

2 に答える 2

8

この問題が発生しました。

ストーリーボードを使用していない場合は、UITabBarControllerデリゲートをに設定するのAppDelegateが良い方法です。ただし、を使用するとStoryboards、は起動時AppDelegateにどこにあるのかわかりません。とデリゲートメソッドを追加することで考えるtabBarControllerでしょう:subclassingtabBarController

(void)tabBarController:(UITabBarController *)tabBarController
   didSelectViewController:(UIViewController *)viewController {

}

...十分でしょう。しかし、それはイライラするほどではありません。

ユーザーがいつタブボタンを押したかを知る必要がありました。- (void)viewWillDisappear:(BOOL)animated {} viewControllerの" "メソッドが実行されたことを知る必要があるので、これをもっと知る必要がありました。

私は自分自身UITabBarControllerの代理人にすることにしました。これは私にはばかげているように見えましたが、私は次のことをしました...

#import <UIKit/UIKit.h>

@interface PlumbsTabBarController : UITabBarController <UITabBarControllerDelegate>

@end

そして、私のviewDidLoad方法では、次のように書きました。

[self setDelegate:self];

これにより、タブバーのデリゲートメソッドを実行できるようになりました。

クレイジーか何か?

わかりました-私は今この答えを編集しています。上記はすべて正しいですが、anavigationControllerが使用されており、tabBarButtonタッチするたびに選択されている場合、クラスを選択したことだけを表示didSelectViewControllerしようとすると、デリゲートメソッドは実行されますか?NSLog(@"%@", viewController);UINavigationController

したがって、全体的な解決策は、複雑さを増すために、に触れたときに、監視する(何かをする)UINavigationControllerそれぞれのをサブクラス化することです。viewControllertabBarbutton

それはとにかく私のために働きます。そして、もし誰かが上記のドリブルをくぐり抜けることができれば、私がこのサイトも完全に役立つと思うので、彼らは有用な側面を見つけるかもしれません-そしてそれは私にとって十分です-。

于 2013-02-11T10:25:25.997 に答える
6

あなたまたはオブジェクトが初期化される場所に入れ[self setDelegate:self];ますViewDidLoad

于 2012-10-23T14:58:31.043 に答える