2017-02-18 57 views
2

为了简单起见,由于应用程序设计的原因,我无法使用嵌入式导航控制器,而是必须使用视图控制器上的手动后退按钮返回到前一个按钮。据我所知,以前的视图控制器也以编程方式推送到这个视图控制器。所以我在这里找到了很多不同问题上的按钮的一些很好的代码,并且我为这个应用程序编写了它。问题是,当我运行该程序时,我创建的栏按钮项目不显示。该代码显示没有错误,我很困惑为什么没有显示出来。我将包含图像和代码,以尽可能使这一点变得清晰。一如既往感谢您提供任何帮助!以编程方式创建后退按钮不会显示在导航栏中?

代码中使用:

@IBOutlet weak var roomImage: UIImageView! 
@IBOutlet weak var locationLabel: UILabel! 
@IBOutlet weak var roomName: UINavigationItem! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Back Button Code 

    let backButton = UIBarButtonItem(title:"Back",style: UIBarButtonItemStyle.plain, target: self, action: #selector(DetailView.back(sender:))) 
    self.navigationItem.leftBarButtonItem = backButton 

    navigationItem.rightBarButtonItem = backButton 
    navigationItem.hidesBackButton = false 

    // Hide da tab bar 

    self.tabBarController?.tabBar.isHidden = true 

    // Do any additional setup after loading the view. 


    // Enter data from other view controllers 

    //roomName.title = stringPassed 
    roomImage.image = imagePassed 
    locationLabel.text = locationPassed 

} 

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

/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

// Back Button Action 

func back(sender: UIBarButtonItem) { 

    if let navigationController = self.navigationController { 

     navigationController.popViewController(animated: true) 

    } 
} 

}

与导航栏

实际故事板当应用程序运行

难道我没有做出某种出路或类似的东西?谢谢!!

故事板布局

的详细信息视图树模型(带有导航栏的问题)

编辑:还没工作,但链接和想法,你给了给了我很多新的想法和选择,直到更具体的答案出现。谢谢!!!

+0

我不会喜欢这种方式。为什么不能使用navigationController。 –

+0

如果我使用导航控制器,则需要3个而不是1个,因为3个不同的视图控制器正在推送到该单个视图。全部植根于选项卡视图。如果你认为有一个更容易的方法,我全都耳熟能详。 –

+0

@Frank_Cerny你可以展示你的故事板结构。您是否通过从控件拖放到viewController来添加NavigationItem? –

回答

1

删除你从控件拖动NavigationBar库面板的ViewController。当您使用self.navigationItem设置navigationItem时,它将不会引用该navigationBar项,因为它与它没有任何关联。

当您使用navigationController?.pushViewController(myVC, animated: true)来推动ViewController时,它会自动在myVC屏幕上显示NavigationBar

+0

我做了你所说的,并且按钮仅在使用推视图时显示,并且导航栏中显示导航栏。但是,对于其他2个未固定在导航控制器中的视图,仍然没有后退按钮。你的回答很有意义,我尽我所能去做这项工作。另外,如果我关闭导航栏时,单个视图会将其压入detailView,但没有任何反应。 –

+0

@Frank_Cerny如果您丢失了navigationController,那么导航栏将不会显示。 –

+0

重点在于创建一个后退按钮,该按钮适用于未在导航控制器中扎根的视图,我可以整天使视图控制器返回按钮,但该实现对此问题无效。您的回答只适用于导航控制器,而且不幸的是这不是问题。 –

0

你能告诉你怎么推到DetialView控制器 我累了编程 这样

func showDetialViewController(){ 
let detialViewController = UIViewConroller() 
navigationController?.pushViewController(detialViewController, animated: true) 
} 
+0

答案意在回答现有的问题,不要提出更多的问题。 – Adeel

+0

一个视图控制器像你说的那样推动另外两个显示,检查上面的注释。 –