Swift - 标题未出现在导航视图控制器中
Swift - Title Not Appearing for Navigation View Controller
我有一个导航视图控制器,它在操作时会向标签栏视图控制器发送一个 segue。由于这个 segue,选项卡式视图控制器继承了导航栏。我正在尝试将标题应用于附加到选项卡栏视图控制器的我的视图控制器之一,但通过代码设置标题对我不起作用。有谁知道为什么会这样?
这是我的故事板的图片:
带有注销按钮的视图控制器是我试图在导航栏中设置标题的地方(代码):
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)
}
}
}
}
}
在您的视图控制器层次结构中,导航栏显示 UITabBarController
的标题,而不是 UITabBarController
内的视图控制器。
在导航栏中显示标题的最简单方法是
override func viewWillAppear(animated: Bool) {
self.tabBarController?.navigationItem.title = "Profile Settings"
}
在注销屏幕中 viewcontroller 添加此 -
self.tabBarController?.navigationItem.title="Profile Settings"
这对我有用:self.parent?.title = "nav bar title"
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"
}
试试这个:
self.navigationController?.navigationBar.topItem?.title = "Profile Settings"
检查注释行的可用性 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
}
Swift 5个简单的回答请按
self.title = "Your Title"
or
DispatchQueue.main.async {
self.title = "Your Title"
}
我有一个导航视图控制器,它在操作时会向标签栏视图控制器发送一个 segue。由于这个 segue,选项卡式视图控制器继承了导航栏。我正在尝试将标题应用于附加到选项卡栏视图控制器的我的视图控制器之一,但通过代码设置标题对我不起作用。有谁知道为什么会这样?
这是我的故事板的图片:
带有注销按钮的视图控制器是我试图在导航栏中设置标题的地方(代码):
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)
}
}
}
}
}
在您的视图控制器层次结构中,导航栏显示 UITabBarController
的标题,而不是 UITabBarController
内的视图控制器。
在导航栏中显示标题的最简单方法是
override func viewWillAppear(animated: Bool) {
self.tabBarController?.navigationItem.title = "Profile Settings"
}
在注销屏幕中 viewcontroller 添加此 -
self.tabBarController?.navigationItem.title="Profile Settings"
这对我有用:self.parent?.title = "nav bar title"
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"
}
试试这个:
self.navigationController?.navigationBar.topItem?.title = "Profile Settings"
检查注释行的可用性 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
}
Swift 5个简单的回答请按
self.title = "Your Title"
or
DispatchQueue.main.async {
self.title = "Your Title"
}