VC 使用 self.present 调用时不显示 navigationItem
Posted
技术标签:
【中文标题】VC 使用 self.present 调用时不显示 navigationItem【英文标题】:navigationItem not displayed when VC called with self.present 【发布时间】:2018-05-05 12:27:52 【问题描述】:需要帮助,因为我现在正在苦苦挣扎几天......
我有一个带有从 viewDiDLoad 调用的导航项的 VC:
override func viewDidLoad()
super.viewDidLoad()
self.customization()
self.fetchData()
...
func customization()
self.navigationItem.title = self.currentUser?.displayName
self.navigationItem.setHidesBackButton(true, animated: false)
let icon = UIImage.init(named: "back")?.withRenderingMode(.alwaysTemplate)
let backButton = UIBarButtonItem.init(image: icon!, style: .plain, target: self, action: #selector(self.dismissSelf))
backButton.tintColor = UIColor(red: 0.0157, green: 0.498, blue: 0, alpha: 1.0)
self.navigationItem.leftBarButtonItem = backButton
self.locationManager.delegate = self
print("called customization()")
当使用触发的 segue Show 调用时,它可以完美运行,没有任何问题。
当我使用以下内容调用 VC 时:
let storyBoard: UIStoryboard = UIStoryboard(name: "Storyboard", bundle: nil)
let viewController = storyBoard.instantiateViewController(withIdentifier: "SecondVC") as! SecondVC
self.present(viewController, animated: true, completion: nil)
我得到了从控制台访问 viewDidLoad 和自定义()的方法:
called customization()
但没有显示导航项。
试图从调用方法中复制customization()中的方法,它们被执行但也没有显示。
知道这里有什么问题吗?
【问题讨论】:
【参考方案1】:演示时必须添加导航:
let storyBoard: UIStoryboard = UIStoryboard(name: "Storyboard", bundle: nil)
let viewController = storyBoard.instantiateViewController(withIdentifier: "SecondVC") as! SecondVC
let nav = UINavigationController(rootViewController: viewController)
self.present(nav, animated: true, completion: nil)
【讨论】:
这很有效。您能否添加一个简短的解释,为什么这是必要的,因为我在其他 VC 中没有必要。谢谢! 当你要推送视图控制器时,你需要导航控制器来推送 VC。所以导航自动嵌入推送。当我们要展示视图控制器时,我们必须用 self(controller) 来展示它,而不是导航控制器,所以我们需要将此导航控制器嵌入到展示的 VC 中。 developer.apple.com/library/content/featuredarticles/… 完美!谢谢。现在最后一件事。如果我尝试关闭用您的代码调用的 SecondVC,它什么也不做。要关闭它,我使用: navController.popViewController(animated: true) 。如果我改用 self.dismiss 它会崩溃,有什么想法吗? 你必须像这样关闭视图控制器:self.dismiss(animated: true, completion: nil) Pop 将与 push 一起使用,dismiss 将与 present 一起使用以上是关于VC 使用 self.present 调用时不显示 navigationItem的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 3 'self.present' 呈现一个新的视图控制器
nmake / VC++ 2010:编译时不依赖 MSVCR100.dll