0

タブバーコントローラーに2つのビューコントローラーがあります。私の 2 番目の Nav コントローラーは、バッジの値を設定したいと考えています。このコントローラーはアプリの起動時に読み込まれないため、バッジは表示されません。そのタブに移動すると、バッジが適切に更新されます。

このスニペットは、タブのビュー コントローラーがロード/リロード/更新などのときに実行されます...

[self.navigationController.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%u",[self.photos count]]];

これを行う正しい方法は? この情報を入れるべき場所のようですが、明確な答えは見つかりませんでした。

4

1 に答える 1

1

TabBarController がロードされると、含まれているすべての初期 viewController が初期化されます。ただし、それぞれのタブ項目に移動するまで、それらのビューは読み込まれません。そのため、この時点でビュー読み込みメソッド (viewDidLoadなど) でコードを実行することはできません。ただし、初期化メソッドの 1 つをオーバーライドすることでコードを実行できます。

ストーリーボードを使用している場合、viewController のアーカイブを解除するプロセスは、NIB がロードされたときにこのメソッドをトリガーします。

- (void) awakeFromNib
{

}

ストーリーボードを使用しない場合、この初期化子は NIB の読み込み前に呼び出されます。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

どちらの場合でも、これらのメソッドをオーバーライドしてコードを実行できます...

- (void) awakeFromNib
    [super awakeFromNib];
    [self.navigationController.tabBarItem 
           setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]];
}


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self.navigationController.tabBarItem 
           setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]];
    }
    return self;
}

ただし、データの取得元に注意する必要があります。この時点self.photosで、たとえば初期化されていない可能性があります。このデータが userdefaults から取得されている場合は、ここにあるデータを読み取り、それに応じてバッジを設定できるはずです。

于 2013-03-27T21:10:49.007 に答える