2017-02-18 17 views
2

Чтобы сделать это простым, из-за дизайна приложения я не могу использовать встроенный навигационный контроллер и вместо этого использовать ручную кнопку возврата на контроллере просмотра, чтобы вернуться к предыдущей. Насколько я знаю, предыдущие контроллеры представлений также подталкивают к этому программно. Поэтому я нашел отличный код для кнопки по многим различным вопросам здесь, и я написал это для этого приложения. Проблема в том, что когда я запускаю программу, элемент Button Bar, созданный мной, не отображается. Код не показывает ошибок, и я смущен, почему ничего не появляется. Я включу изображения и код, чтобы сделать это как можно более ясным. Как всегда благодарю вас за любую помощь, которую вы можете предоставить !!!Программно созданная кнопка возврата не отображается в панели навигации?

Код Использована

@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) 

    } 
} 

}

Actual Раскадровка с панели навигации

Когда приложение запускается

Возможно, я не сделал что-то в этом роде или что-то в этом роде? Спасибо!!

раскадровка раскладка

Дерево Модель Detail View (The один с проблемой навигационной панели)

EDIT: До сих пор не работает, но ссылки и идеи, которые вы дали дали мне много новых идей и вариантов для изучения, пока не появится более конкретный ответ. Спасибо!!!

+0

Я бы не хотел этого. Почему нельзя использовать navigationController. –

+0

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

+0

@Frank_Cerny Можете ли вы показать свою структуру раскадровки. Добавили ли вы NavigationItem, перетащив элементы управления в viewController? –

ответ

1

Удалите NavigationBar, что вы должны перетащить с панели управления библиотеки на ViewController. Когда вы устанавливаете navigationItem с использованием self.navigationItem, он не будет ссылаться на этот элемент navigationBar, поскольку он не имеет к нему связи.

При нажатии ViewController с помощью navigationController?.pushViewController(myVC, animated: true) оно автоматически отображает NavigationBar на экране myVC.

+0

Я сделал то, что вы сказали, и кнопка появляется только тогда, когда я использую push-представление. У меня есть панель навигации, отображаемая в навигационном контроллере. Однако для других 2 представлений, которые не внедрены в контроллер навигации, по-прежнему нет кнопки «Назад». Ваш ответ имеет большой смысл, и я стараюсь сделать все возможное, чтобы сделать эту работу. Также, если я отключу навигационную панель, когда один вид, внедренный в нее, подталкивает к detailView, ничего не происходит, как обычно. –

+0

@Frank_Cerny Если вы потеряли navigationController, тогда навигационная панель не будет отображаться. –

+0

Все дело в том, чтобы создать кнопку «Назад», которая работает для представлений, не внедренных в контроллер навигации, я могу делать обратные кнопки с контроллерами представлений весь день, но эта реализация не работает для этой проблемы. Ваш ответ работал только на контроллер навигационной системы, который, к сожалению, не был проблемой. –

0

Можете ли вы показать, как вы толчок к DetialView контроллер Я устал программно как этот

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

Ответы предназначены для ответа на поставленный вопрос, чтобы не поднимать больше вопросов. – Adeel

+0

Один контроллер просмотра нажимает так, как вы сказали, а остальные 2 показывают, отметьте вышеприведенный комментарий. –

 Смежные вопросы

  • Нет связанных вопросов^_^