開発メモ

開発メモ

UINavigationItemのインスタンス取得

iOSのUINavigationController関連で、rightBarButtonItemの色を変更しよう とした際に、以下のコードだと上手く色が変更できなかった。

UINavigationController *navigationController = [... currentNavigationController];
navigationController.navigationItem.rightBarButtonItem.tintColor = color

理由は、2行目でnavigationController.navigationItemとしている部分で、 インスタンスが取得出来ていないから。

以下のようにして修正した

UINavigationController *navigationController = [HogeController currentNavigationController];
NSArray *navigationItems = navigationController.navigationBar.items;
for (UINavigationItem *item in navigationItems) {
    item.rightBarButtonItem.tintColor = color;
}

navigationItemsは、NavigationControllerに積まれているスタックのコントローラが 全て入っている。 上の例だと、全てのスタックに対して、rightBarButtonItemの色を変更しているが、 現在一番上にあるコントローラのみ取得したい場合は、↓でOK

((UINavigationItem *)[navigationItems lastObject] ).rightBarButtonItem.tintColor = color