在其选择器操作函数中引用UIBarButtonItem

时间:2016-08-01 00:27:21

标签: ios uibutton action selector uiswitch

我正在为UINavigationItem(rightBarButtonItem)实现一个非常标准的选择按钮。我正在进行的方式是在viewDidLoad函数中实例化它。我将选择器作为动作传递,然后将该选择器函数写入viewDidLoad函数之外。

明显的问题是,导航选择按钮不再在选择器功能的范围内,所以我无法参考和使用它。

必须有很多方法来实现“选择”导航按钮。我希望它像集合视图中的开关一样,因此我只能在选择按钮被击中时选择并突出显示集合视图单元格。为此,我的选择器操作将打开和关闭myButton.selected布尔值,就像一个开关(所以我不认为我需要一个UISwitch)。

足够的解释,这是代码;

class GalleryViewController: UIViewController {

@IBOutlet var collectionView: UICollectionView!
....

override func viewDidLoad() {
    super.viewDidLoad()
    ...

    //MARK: Select button
    let mySelector: Selector = #selector(GalleryViewController.selectSelector)
    let selectButton: UIBarButtonItem = UIBarButtonItem(title: "Select", style: UIBarButtonItemStyle.Plain, target: self, action: mySelector)

    self.navigationItem.rightBarButtonItem = selectButton

}

//MARK: Select Button Function
func selectSelector() {
    //Toggle selectButton ON/OFF here, and more

}

如果你有一个很好的方法来创建一个navigationBar barButtonItem来切换collectionViewCells的状态,我很乐意听到它!只是提供一个完整的答案,不要假设我知道多少(仍然觉得我在Xcode中面对)

1 个答案:

答案 0 :(得分:0)

你有几个选择;您可以在属性中存储对UIBarButtonItem的引用而不是局部变量,以便您可以在动作处理函数中使用它,或者您可以从self.navigationItem.rightBarButtonItem获取引用,但最简单的方法是只是为了利用UIBarButtonItem将被传递给你的动作处理函数的事实:

func selectSelector(sender: UIBarButtonItem) {
    //Toggle selectButton ON/OFF here, and more
}