2016-11-23 20 views
2

我面临一个问题,因为有两种方法我如何显示我的ViewControllerUIBarButtonItem取决于演示文稿。 Swift3

  1. 第一种方式是performSegue(withIdentifier: "segue", sender: self)

它正常工作,因为那时我在navigationItem有这样的后退按钮:

enter image description here

  • 然后我使用此代码来呈现与第一种情况相同的ViewController(来自另一个viewController):

    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
        let navVC = storyboard.instantiateViewController(withIdentifier: "navViewController") as! UINavigationController 
        let vc = navVC.topViewController as! ViewController    
        self.present(navVC, animated: true, completion: nil) 
    
  • 但当时我没有在我的ViewController任何后退按钮。

    我的问题是:我怎样才能让我的backButton (exactly how it is)当我使用这个功能:performSegue(withIdentifier: "segue", sender: self),但添加按钮(可以看看不同),当我使用此功能:self.present(navVC, animated: true, completion: nil)

    注:在我的情况1我的segue直接连接到ViewController,但在情况2中,我在此UINavigationController中出现UINavigationControllerViewControllerembed in

    编辑:我试过这个代码,但它始终打印:"1........."

    if self.presentingViewController != nil { 
          print("1..........") 
         } else if self.navigationController?.presentingViewController?.presentedViewController == self.navigationController { 
          return print("2.........") 
         } else if self.tabBarController?.presentingViewController is UITabBarController { 
          return print("3........") 
         } 
    

    而且也是这个代码打印:"Else.............."

    let isPresentingInAddMealMode = presentedViewController is UINavigationController 
    
    if isPresentingInAddMealMode { 
        print("FirstOption......................") 
    
    } else { 
        print("Else......................") 
    
    } 
    

    如果您需要更多的信息只是让我知道。 非常感谢。

    +2

    当你提出一个视图控制器作为一个模式,你需要自己添加的按钮navigationItem。 – Sealos

    +0

    我知道,但是当我添加一个按钮navigationItem我的“<返回”消失,只有我添加的按钮 –

    回答

    0

    我已经解决了它!我把restorationIdentifier我的根navigationController,然后我就检查是否是navigationControllerrestorationIdentifier这样的:

    if self.navigationController?.restorationIdentifier == "navViewController"{ 
         let leftItem = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(goBack)) 
         self.navigationItem.leftBarButtonItem = leftItem //Adds item if id is navViewController 
        }else{ 
         self.navigationItem.leftBarButtonItem = nil //removes it and keeps "<Back" 
        } 
    
    0

    您需要检查presentedViewController并添加后退按钮,如下所示。

    if ([self presentedViewController]) { 
         // add your back button item here 
        } 
    
    +0

    我试过这个选项,但它总是添加backbuttonItem,但我只想在一个情况下添加它:/ –

    0

    试试这个:

    let viewController = storyboard?.instantiateViewController(withIdentifier: "Login") as! LoginView 
    let customNavigation = UINavigationController(rootViewController: viewController) 
    customNavigation.navigationBar.tintColor = UIColor.black 
    self.present(customNavigation, animated: true, completion: nil) 
    

    override func viewDidLoad() { 
        super.viewDidLoad() 
        self.title = "Login" 
        navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "back"), style: .plain, target: self, action: #selector(self.backButton)) 
    
    } 
    func backButton() { 
        self.dismiss(animated: true, completion: nil) 
    } 
    

    尝试设置形象的UIBarButtonItem