3

タブバー コントローラーにナビゲーション コントローラーを持つアプリがあります。Navigation Controller のルートは、Table View Controller です。テーブル ビューには、イメージ ビューへの続きがあります。イメージ ビュー コントローラーからタブのバッジ値を更新したいと考えています。タブバー コントローラーから、これは正常に動作します。

UIViewController *viewController = [self.tabBarController.viewControllers objectAtIndex:1];
viewController.tabBarItem.badgeValue = @"x";

しかし、同じコードをイメージビュー コントローラーに入れると、機能しません。実行後に「viewController」の値を確認すると、値は nil です。self.tabBarController についても同様です。何らかの理由で、イメージ ビュー コントローラーがそのタブバー コントローラーを認識できません。

4

2 に答える 2

1

self.navigationController.tabBarController で tabBarController にアクセスできるはずです。したがって、コードは次のようにする必要があります。

UIViewController *viewController = [self.navigationController.tabBarController.viewControllers objectAtIndex:1];
viewController.tabBarItem.badgeValue = @"x";
于 2012-11-25T03:52:41.570 に答える
0

これを行うには多くの方法がありますが、最善の方法は NSNotification を購読し、画像ビューまたはどこからでもその通知を作成して、次のように見えるようにすることです。

[[NSNotificationCenter defaultCenter]
    addObserver:objectToListen
    selector:@selector(methodToRun:)
    name:@"NotificationName"
    object:nil];

そして、イメージビューなどのより深いアイテムや、このように投稿したものは何でも

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationName" object:nil userInfo:dictionaryWithValuesForMethodToUse to use];

そして、バッジの値を変更するメソッドのように、userInfo から情報を取得します。

- (void)methodToRun:(NSNotification *)notification
{
    NSDictionary *dictionary = [notification userInfo];
}
于 2012-11-25T00:04:41.057 に答える