xcode Swift -导航视图控制器不显示标题

iecba09b  于 2022-12-14  发布在  Swift
关注(0)|答案(8)|浏览(260)

我有一个导航视图控制器,它在动作时向标签栏视图控制器发送一个序列。由于这个序列,标签栏视图控制器继承了导航栏。我试图将一个标题应用到标签栏视图控制器上的一个视图控制器上,但是通过代码设置标题对我不起作用。有人知道这是为什么吗?
下面是我的故事板图片:

带有注销按钮的视图控制器是我试图在导航栏中设置标题的地方(代码):

import UIKit

class ProfileSettingsViewController: UIViewController {

    override func viewWillAppear(animated: Bool) {

        self.navigationItem.title = "Profile Settings"

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.navigationItem.leftBarButtonItem = nil

    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func logoutButton(sender: AnyObject) {

        PFUser.logOut()
        var currentUser = PFUser.currentUser()
        self.performSegueWithIdentifier("userLoggedOut", sender: self)
        self.navigationController?.setNavigationBarHidden(self.navigationController?.navigationBarHidden == false, animated: true)

    }

}

视图控制器嵌入在导航控制器中,触发选项卡栏控制器的继续:

import UIKit

class UserRegistrationViewController: UIViewController {

    func displayAlert(title:String, error:String) {

        var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert)

        alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: {
            action in


        }))

        self.presentViewController(alert, animated: true, completion: nil)

    }

    @IBOutlet var usernameTextField: UITextField!

    @IBOutlet var emailTextField: UITextField!

    @IBOutlet var passwordTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func registerUser(sender: AnyObject) {

        var error = ""

        if usernameTextField.text == nil || emailTextField.text == nil || passwordTextField.text == nil {

            error = "Please enter a username, email and password"

        }

        if error != "" {

            displayAlert("Error In Form", error: error)

        } else {

            var user = PFUser.currentUser()

            user.username = usernameTextField.text
            user.password = passwordTextField.text
            user.email = emailTextField.text

            user.saveInBackgroundWithBlock {
                (succeeded: Bool!, signupError: NSError!) -> Void in
                if signupError == nil {

                    println(user.username)
                    println(user.password)
                    println(user.email)

                    self.performSegueWithIdentifier("successfulRegistration", sender: self)

                    self.navigationController?.setNavigationBarHidden(self.navigationController?.navigationBarHidden == false, animated: true)

                    // Hooray! Let them use the app now.
                } else {

                    if let errorString = signupError.userInfo?["error"] as? NSString {
                        error = errorString
                    } else {

                        error = "Please try again later."

                    }

                    self.displayAlert("Could Not Sign Up", error: error)

                }
            }

        }

    }


}
k0pti3hp

k0pti3hp1#

这对我很有效:self.parent?.title = "nav bar title"

pvabu6sv

pvabu6sv2#

在视图控制器层次结构中,导航栏显示的是UITabBarController的标题,而不是UITabBarController内部的视图控制器。
在导航栏中显示标题最简单方法是

override func viewWillAppear(animated: Bool) {

    self.tabBarController?.navigationItem.title = "Profile Settings"

}
ryhaxcpt

ryhaxcpt3#

试试这个:

self.navigationController?.navigationBar.topItem?.title = "Profile Settings"
6yjfywim

6yjfywim4#

SWIFT 3

如果内嵌在UINavigationController中,您可以从ViewController的viewDidLoad()方法中设定标题,如下所示。

override func viewDidLoad() {
    super.viewDidLoad()

    /* If view controller is a direct child of UINavigationController */
    self.title = "Title Here"

    /* If view controller's parent is a direct child of UINavigationController e.g. a child of embedded tab view controller */
    self.parent?.title = "Title Here" 
}
py49o6xq

py49o6xq5#

在注销屏幕视图控制器中添加以下内容-

self.tabBarController?.navigationItem.title="Profile Settings"
rm5edbpk

rm5edbpk6#

Swift 5简单的答案请遵循

self.title = "Your Title"

or 

DispatchQueue.main.async {
    self.title = "Your Title"
}
yx2lnoni

yx2lnoni7#

检查注解行,了解ViewController(带和不带Tabbarcontroller)可用性

override func viewDidAppear(_ animated: Bool) {
    addNavBarImage()
}

func addNavBarImage() {

    let navController = self.navigationController!
    let image = #imageLiteral(resourceName: "navview") //Your logo url here
    let imageView = UIImageView(image: image)
    let bannerWidth = navController.navigationBar.frame.size.width
    let bannerHeight = navController.navigationBar.frame.size.height
    let bannerX = bannerWidth / 2 - (image.size.width) / 2
    let bannerY = bannerHeight / 2 - (image.size.height) / 2
    imageView.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth, height: bannerHeight)
    imageView.contentMode = .scaleAspectFit

    self.navigationItem.titleView = imageView //  ViewController without Tabbarcontroller 

    self.tabBarController?.navigationItem.titleView = imageView //ViewController with Tabbarcontroller 

}
pjngdqdw

pjngdqdw8#

将以下代码添加到视图控制器中:

// title color
    self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]

对我很有效。我希望这对某人有帮助。

相关问题