4

これについて「もっと」尋ねられていないことに驚いています:-)

私のアプリは、複数のセクションを持つ標準のタブバーコントローラーです。各セクション(タブ)には、いくつかのビューコントローラー(基本的なテーブルビュー+詳細ビュータイプのセットアップ)を制御するナビゲーションコントローラーが含まれています。6番目のタブを追加したので、iOSは最後の2つのタブを制御するデフォルトの「その他」タブを作成します。ナビゲーションバーの中央にある[その他]テキスト(注:ボタンのテキストやタブ自体のタイトルではありません)を削除し、カスタムの背景画像をナビゲーションバーに適用する必要があります。

注:この質問は、「その他」のナビゲーションバーのカスタマイズに関するものです。iOSで作成されていないすべてのナビゲーションバーの背景画像とtitleViewテキストを正常に変更しました。

私のアプリデリゲートでは、アプリは次のようにまとめられています。

ビューコントローラの作成:

ViewController1 *vc1 = [ViewController1 alloc] initWithNibName@"View1" bundle:nil];
vc1.title = @"VC1";
vc1.tabBarImage.image = [UIImage imageNamed:@"image1.png"];

ビューコントローラvc2からvc6について、上記のルーチンをさらに5回繰り返します。

個々のナビゲーションコントローラーを作成します。

UINavigationController *nc1 = [UINavigationController alloc] initWithRootViewController:vc1];

navコントローラーnc2-nc6に対してさらに5回繰り返します。

ナビゲーションコントローラーをタブバーコントローラーに追加する

self.tabBarController.viewControllers = [NSArray arrayWithObjects: vc1, vc2, vc3, vc4, vc5, vc6, nil];

上記のコードはすべて完全に機能します。問題ない。

次に、カスタムの背景画像をMoreナビゲーションコントローラーに追加します。

    if (self.tabBarController.moreNavigationController){
        if ([self.tabBarController.moreNavigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
            UIImage *image = [UIImage imageNamed:@"navlogo.png"];
            [self.tabBarController.moreNavigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
        } else {
            UINavigationBar *navbar = self.tabBarController.moreNavigationController.navigationBar;
            UIImage *headerImg = [UIImage imageNamed:@"navlogo.png"];
            [navbar setBackgroundImage:headerImg forBarMetrics:UIBarMetricsDefault];
        }       
    }

これも問題なく動作します。問題ない

カスタム背景にはクライアントのロゴのデッドセンターが含まれているため、デフォルトで「詳細」と表示されているtitleViewのテキストを削除する必要があります。ナビゲーションボタンのテキストではなく、ナビゲーションバーの中央にあるラベルについて話していることに注意してください。

論理的には、これが機能すると想定されます。

    UILabel *label = [[UILabel alloc] init];
    label.text = @"";
    self.tabBarController.moreNavigationController.navigationItem.titleView = label;

...これはすべての個別のビューコントローラーで行うため、self.tabBarController.moreNavigationControllerなどをself.navigationItem.titleViewに置き換えます。

しかし、これは機能しません!これとまったく同じコードを使用して、すべてのナビゲーションコントローラーの背景画像とtitleViewテキストの両方を正常に変更できます(ここでも、moreNavControllerのものをself.navigationController.navigationItemに置き換えます...)。ただし、アプリデリゲートでは、背景画像のみを設定でき、MorenavコントローラーのtitleViewは設定できません。

任意の解決策をいただければ幸いです。

VB

4

6 に答える 6

1

結局のところ、私の元のコードは正しく、間違った場所にありました。

UILabel *label = [[UILabel alloc] init];
label.text = @"";
self.tabBarController.moreNavigationController.navigationBar.topItem.titleView = label;

ただし、rootViewControllerとしてtabBarControllerを追加する前に、以前はこれを実行していました。

正しい順序は次のとおりです。

self.window.rootViewController = self.tabBarController;

UILabel *label = [[UILabel alloc] init];
label.text = @"";
self.tabBarController.moreNavigationController.navigationBar.topItem.titleView = label;
于 2012-08-03T18:21:18.760 に答える
1

Swift5バージョンを正しく動作させるのにかなりの時間がかかったので投稿する

moreNavigationController.viewControllers[0].tabBarItem = UITabBarItem(title: "My Title", image: UIImage(named: "MoreTab")!, tag: 1111)
moreNavigationController.navigationBar.topItem!.title = "My Title"

moreNavigationController.tabBarItemの変更はうまく機能しないことに注意してください。UITabBarControllerを拡張するクラスのviewDidLoad()でこれを行います

于 2019-06-15T18:21:49.787 に答える
0

たとえば、アプリケーション:didFinishLaunchingWithOptions:のタブコントローラーiOSテンプレート

// Override point for customization after application launch.

UITabBarController *tabBarController = (UITabBarController *)(self.window.rootViewController);
UINavigationController *moreNavigationController = tabBarController.moreNavigationController;
moreNavigationController.navigationBar.topItem.title = @"";

これにより、ナビゲーションバーのタイトルは変更されますが、タブラベルのタイトルは「詳細」のままになります。

于 2012-08-03T02:35:19.993 に答える
0

見つけた

スウィフト2.2

これをdidFinishLaunchingWithOptionsに入れます

tabBarCtr.moreNavigationController.delegate = self
tabBarController.moreNavigationController.viewControllers.first?.title = ""

このデリゲートメソッドを実装する

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool)
    {
        navigationController.navigationBar.topItem?.rightBarButtonItems = nil
        navigationController.viewControllers.first?.title = ""

    }

これにより、ナビゲーションコントローラーのナビゲーションバーの上にある編集ボタンも削除されます。

于 2016-07-24T12:12:51.403 に答える
-1

これはスレッドのすべての人に当てはまるわけではないかもしれませんが、私にとっては...5つを超えるアイテムを持つtabBarControllerがありました...自動生成されたmoreNavigationControllerにタイトルを設定する必要がありました...self.titleを指定するのと同じくらい簡単でした=@"title"ターゲットdetailviewcontrollerのviewDidLoadメソッド。

于 2014-06-30T18:57:01.650 に答える
-3

viewDidLoad関数内でタイトルを変更できます

self.title = @""
于 2012-08-03T03:10:45.420 に答える