2015-04-16 4 views
4

У меня есть контроллер вида навигации, который после действия отправляет segue в контроллер отображения панели вкладок. Из-за этого segue контроллер с вкладками отображает навигационную панель. Я пытаюсь применить заголовок к одному из моих контроллеров представления, прикрепленному к контроллеру просмотра панели вкладок, но установка заголовка через код не работает для меня. кто-нибудь знает причину, почему это может быть?Swift - Заголовок не отображается для контроллера вида навигации

Вот фотография моего раскадровки:

storuboard

Контроллер вид с помощью кнопки выхода из системы, где я пытаюсь установить заголовок в панели навигации (код):

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) 

       } 
      } 


     } 


    } 



} 

ответ

3

Это работало для меня: self.parentViewController?.title = "nav bar title"

8

В вашей иерархии диспетчера, на панели навигации отображается заголовок UITabBarController, а не отображаются контроллеры внутри UITabBarController.

Самый простой способ получить название показано в навигационной панели будет

override func viewWillAppear(animated: Bool) { 

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

} 
+0

Это решение не кажется, фиксируя проблему. Моя панель навигации на самом деле не появляется. Может быть, это связано с тем, что я называю 'self.navigationItem.leftBarButtonItem = nil' в моем' viewDidLoad'? – cphill

+0

Извините, проигнорируйте последний комментарий. Я установил для navigationController значение false. Скажем, у меня был контроллер без навигации для контроллера панели с вкладками. Я установил бы эту команду в действие segue с неавигационного контроллера? – cphill

2

В Выход экрана ViewController добавить -

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

СВИФТ 3

Если встроено в UINavigationController, вы можете установить заголовок следующим образом из метода viewDidLoad() ViewController.

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" 
} 
0

Попробуйте это:

self.navigationController?.navigationBar.topItem?.title = "Profile Settings" 
Смежные вопросы