我有一个Login视图控制器,我在其中创建navigationController,并使用自定义视图(leftBarButtonItem
)创建rightBarButtonItems
和UIButton
。现在,我只设置navigationController
的条形按钮项,以便使用以下命令在该navigationController上推送的所有视图控制器访问它们:
navigationController.navigationItem.rightBarButtonItems = [someBarButton, someOtherBarButton]
navigationController.navigationItem.leftBarButtonItem = backBarButton
现在为每个视图控制器设置self.navigationItem.leftBarButtonItem = self.navigationController.navigationItem.leftBatButtonItem
。我可以查看按钮。现在,因为按下这些的方法应该在视图控制器中实现,我在视图控制器的viewDidLoad()
中尝试了这个:
self.navigationItem.leftBarButtonItem!.target = self
self.navigationItem.leftBarButtonItem!.action = Selector("backButtonPressed")
但是我没有在方法中收到任何回电:
func backButtonPressed() {
println("Back pressed")
popViewController()
}
编辑#1:我在Login视图控制器中设置leftBarButtonItem的代码:
let navigationController = UINavigationController()
let backButton = UIButton(frame: CGRectMake(0, 0, kNavBarIconHeight, kNavBarIconHeight))
backButton.setImage(UIImage(named: "backButton"), forState: UIControlState.Normal)
let backBarButton = UIBarButtonItem(customView: backButton)
navigationController.navigationItem.leftBarButtonItem = backBarButton
我使用的是navigationController的barButtonItem,而不是视图控制器堆栈中的前一个控制器
答案 0 :(得分:0)
尝试更改设置自定义栏按钮项的代码,如下所示 -
let leftButton: UIButton = UIButton.buttonWithType(UIButtonType.Custom)
leftButton.frame = CGRectMake(0, 0, 40, 40) ;
leftButton.setImage(UIImage(named:"ImageName.png"), forState: UIControlState.Normal)
leftButton.addTarget(self, action: "backButtonClick", forControlEvents: UIControlEvents.TouchUpInside)
var leftBarButtonItem: UIBarButtonItem = UIBarButtonItem(customView: leftButton)
self.navigationItem.setLeftBarButtonItem(leftBarButtonItem, animated: false);
问题是您正在设置自定义按钮并在条形按钮上添加操作!
答案 1 :(得分:0)
导航控制器中的后退按钮既不是堆栈顶视图控制器的leftBarButtonItem,也不是导航控制器的leftBarButtonItem。它是堆栈中前一个视图控制器的backBarButtonItem。
您可以更改它的标题,但不幸的是,您无法为其添加目标/选择器对(您可以,但它永远不会有效)。
答案 2 :(得分:-1)
首先,我创建了单独的NavigationController类,它是UINavigationController
的子类,我为每种类型的按钮定义了方法。在这些方法中,我使用NSNotificationCenter.defaultCenter().postNotificationName
为每种类型的按钮发布适当的通知。为了确保只有最顶层的viewcontroller接收事件,所有viewcontroller在viewWillAppear
中使用
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("buttonPressed"), name: 'button1Notification', object: nil)
并在viewWillDisappear
期间使用
NSNotificationCenter.defaultCenter().removeObserver(self)
。