2015-02-08 2 views
1

Я пытаюсь настроить внешний вид UIBarButtonItem на UISplitViewController разделенную на две UINavigationController-х (детализация и взгляды мастера), но держать удар в кирпичной стене , Сначала я воспользовался советом here, но не смог достичь желаемых результатов.Пользовательское UIBarButtonItem в UISplitViewController не реагирует на щелчки (iPhone)

В случае если я реализую кнопку назад в viewDidLoad метод моего Detail View Controller таким образом:

if let svc = splitViewController { 
    navigationItem.leftBarButtonItem = svc.displayModeButtonItem() 
} 

я получаю кнопку «Назад» по умолчанию, который переходит обратно в Master View контроллера. Но если я пытаюсь настроить кнопку, используя следующий код:

if let svc = splitViewController { 
     let searchButton = UIBarButtonItem(
      image: UIImage(named: "magnifying-glass"), 
      style: UIBarButtonItemStyle.Plain, 
      target: svc.displayModeButtonItem().target, 
      action: svc.displayModeButtonItem().action 
     ) 

     navigationItem.leftBarButtonItem = searchButton 
    } 

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

Любые идеи о том, что здесь происходит?

+0

являются случаи UISplitViewController же? –

+0

такой же адрес памяти – kellanburket

+0

вы можете совместно использовать код внутри displayModeButtonItem() метод –

ответ

1

Я предлагаю вам создать и использовать свой пользовательский UIBarButtonItem в prepareForSeque в главном контроллере. по умолчанию будет создан новый экземпляр вашего контроллера подробных представлений !!! игнорировать часть с iPhone ios7support, это другая история :-) https://github.com/op183/MasterDetailDemo

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetail" { 
     if let indexPath = self.tableView.indexPathForSelectedRow() { 
      let object = objects[indexPath.row] as String 
      if let navController = (segue.destinationViewController as? UINavigationController) { 
       let controller = navController.topViewController as DetailViewController 
       controller.detailItem = object 
       let defaultBarButton = splitViewController?.displayModeButtonItem() 
       let searchButton = UIBarButtonItem(
        image: UIImage(named: "magnifying-glass"), 
        style: UIBarButtonItemStyle.Plain, 
        target: defaultBarButton.target, 
        action: defaultBarButton.action 
       ) 
       controller.navigationItem.leftBarButtonItem = searchButton 
       controller.navigationItem.leftItemsSupplementBackButton = true 
      } else { 

       // iPhone ios7support 
       (segue.destinationViewController as DetailViewController).detailItem = object 
      } 
     } 
    } 
} 
+0

Спасибо за понимание поведения контроллера разделенного вида, но я все еще испытываю такую ​​же проблему после внесения корректировки, которую вы предложили. Кнопка есть, но не ссылается на – kellanburket

+0

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

+0

он устанавливается здесь: https://github.com/kellanburket/ravelry/blob/master/ravelry/LoaderImageController.swift – kellanburket

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