2015-02-08 56 views
1

我试图自定义外观UIBarButtonItemUISplitViewController分为两个UINavigationController的(细节和主视图),但保持击中砖墙。我首先按照建议here,但一直无法达到预期的效果。UISplitViewController中的自定义UIBarButtonItem不响应点击(iPhone)

如果,如果我实现我的详细视图控制器以这种方式viewDidLoad方法的返回按钮:

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

我得到默认的“后退”按钮导航回母版视图控制器。但是,如果我尝试使用以下代码自定义按钮:

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的实例相同吗? – 2015-02-10 19:21:59

+0

相同的内存地址 – kellanburket 2015-02-10 19:51:24

+0

你可以共享代码里面displayModeButtonItem()方法 – 2015-02-10 19:54:45

回答

1

我建议你在主视图控制器的prepareForSeque中创建和使用自定义的UIBarButtonItem。分割视图控制器默认会创建你的详细视图控制器的新实例!忽略与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 2015-02-13 23:40:00

+0

让我们通过github分享你的代码,如果你想的话。这对我来说很有趣,因为我经常使用'custom'UIBarButtonItem,看起来,你的代码片段似乎很好。 – user3441734 2015-02-14 06:58:49

+0

这是在这里设置:https://github.com/kellanburket/ravelry/blob/master/ravelry/LoaderImageController.swift – kellanburket 2015-02-14 18:56:17