web-dev-qa-db-ja.com

ナビゲーションコントローラのタイトルが表示されませんか?

したがって、_AppDelegate didFinishLaunchingWithOptions_のOptionsViewControllerとしてrootViewControllerがある場合...

_let rootVC = OptionsViewController()
        let navigationController = UINavigationController(rootViewController: rootVC)
        navigationController.navigationBar.barTintColor = .white
        navigationController.navigationBar.isTranslucent = false
        navigationController.navigationBar.tintColor = .black
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window!.rootViewController = navigationController
        self.window?.makeKeyAndVisible()
_

...viewDidLoad()でこれを行うと、OptionViewControllerのタイトルの設定が機能します。

_    title = "Route Options"
_

enter image description here

しかし、OptionsViewControllerをナビゲーションスタックにプッシュすると、タイトルが表示されません。

つまりrootViewControllerAppDelegateとして別のビューで開始した場合:

_ let rootVC = HomeViewController()
    let navigationController = UINavigationController(rootViewController: rootVC)
    navigationController.navigationBar.barTintColor = .white
    navigationController.navigationBar.isTranslucent = false
    navigationController.navigationBar.tintColor = .black
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window!.rootViewController = navigationController
    self.window?.makeKeyAndVisible()
_

そして、HomeViewControllerで、OptionViewControllerを次のようにプッシュします。

_    let optionsVC = OptionsViewController()
    navigationController?.pushViewController(optionsVC, animated: true)
_

タイトルが表示されません!

enter image description here

タイトルを表示するために管理した唯一の方法は、(OptionViewControllerで)実行することです

_navigationController?.navigationBar.topItem?.title = "Route Options"
_

しかし、それは中央ではなく、戻るボタンとして表示されます。これは私が望むものではありません。

enter image description here

誰かがタイトルを、navigationControllerスタックにプッシュされたときにナビゲーションバーの真ん中にあるように設定する方法を教えてもらえたら、すばらしいでしょう。

コード

AppDelegate.Swift

_class AppDelegate: UIResponder, UIApplicationDelegate {
     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let rootVC = HomeViewController()
        let navigationController = UINavigationController(rootViewController: rootVC)
        let barAppearance = UINavigationBar.appearance()
        barAppearance.barTintColor = UIColor.blue
        barAppearance.tintColor = UIColor.white
        barAppearance.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window!.rootViewController = navigationController
        self.window?.makeKeyAndVisible()

        return true
    }
_

HomeViewController.Swift

_class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, DestinationDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let optionsVC = OptionsViewController()
            self.definesPresentationContext = false //else going to try and present optionVC on homeVC when in optionVC
            navigationController?.pushViewController(optionsVC, animated: true)
        }
        tableView.deselectRow(at: indexPath, animated: true)
    }
}
_

OptionsViewController.Swift

_class OptionsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource,
    DestinationDelegate, SearchBarCancelDelegate,UISearchBarDelegate,
    CLLocationManagerDelegate {
    override func viewDidLoad() {
        self.title = "Route Options"
    }
_
12
14wml

タイトルに基づいてここに来る他の人のために、IBのViewControllerクラスを適切なSwiftファイルに設定することを忘れないでください。

それをした後、私は問題なくタイトルを設定することができました

self.navigationItem.title = "my title"

または

self.title = "my title"
3
Suragch

NavigationItem.titleを目的の値に設定する必要があります。画像が必要な場合は、navigationItem.titleViewを設定します。

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your title here"
 } 
3
JustinM

最初にUINavigationBar colorとtext colorを設定する必要があります。これをdidFinishLaunchingWithOptionsで試してください。

_let barAppearance = UINavigationBar.appearance()
    barAppearance.barTintColor = UIColor.blue
    barAppearance.tintColor = UIColor.white
    barAppearance.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
_

バックボタンの後に文字列を削除したい場合は、これらも追加します

_let barItemAppearace = UIBarButtonItem.appearance()
    barItemAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)
_

viewDidLoad()にタイトルを設定するか、

_  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.title = "Your Title"

}
_
3
Midhun K Mohan

それを試してみてください:

HomeViewController内:

let optionsVC = OptionsViewController()
navigationController?.viewControllers = [optionsVC]

そして、あなたのOptionsViewController

override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.navigationBar.isTranslucent = false
        navigationItem.title = "Your Title"
    }
1
javimuu

Objective-Cを使用すると、タイトルが表示されず、次のシーンに戻ると、タイトルが[戻る]ボタンの横に表示されるという問題もありました。

理由はよくわかりませんが、そのシーンの相対ViewControllerをObjective-CではなくSwiftでプログラミングすることで解決しました。

その後、次のコマンドを使用するだけで十分です。

self.title = "My Title"

そして、ifステートメントやその他の方法論を使用して、プログラムで必要なものを書くことができました。

多分これはObjective-Cでこの問題を抱えている人に役立つかもしれません。

0
Jack T

以下の行を追加して、ナビゲーション項目のタイトルを設定します

self.title = "Title 1"
0
venkat