ios - Swift:除了使用 button.tag 之外,是否有更简洁的方法来传递额外的 UIBarButtonItem 操作:选择器参数?

标签 ios swift selector uibarbuttonitem

我目前正在开发一个类似 snapchat 的菜单,单击左右 UIBarButtonItem 会使屏幕向各自的方向移动。

TL;DR - 我想知道是否有一种(干净的)内置方式将标记作为可选类型传递以避免崩溃。

override func viewDidLoad() {
    super.viewDidLoad()

// Other setup code here

    let leftButton =  UIBarButtonItem(title: leftButtonString, style: UIBarButtonItemStyle.Plain, target: self, action: "navButtonClicked:")
    let rightButton = UIBarButtonItem(title: rightButtonString, style: UIBarButtonItemStyle.Plain, target: self, action: "navButtonClicked:")

    // These tags are not a good solution because they aren't optionals!
    leftButton.tag = 0
    rightButton.tag = 1 // this isn't necessary, but I don't want it to crash...

// More setup here

}

func navButtonClicked(sender: UIBarButtonItem) {
    // Goes right by default
    let currentX = self.parentScrollView!.contentOffset.x
    var screenDelta = self.parentScrollView!.frame.width

    if sender.tag == 0 {
        screenDelta *= -1
    }

    UIView.animateWithDuration(0.5, animations: {() in
        self.parentScrollView!.contentOffset = CGPoint(x: currentX + screenDelta, y: 0)
    })
}

我目前的解决方案有效,我只是在努力编写更简洁的代码。

谢谢!

最佳答案

选项 1: 在您的 View Controller 中创建两个对应于每个 UIBarButtonItem 的属性。这样您就可以分辨出哪一个被轻敲了。

选项 2: 继承 UIBarButtonItem 并添加所需的属性。

关于ios - Swift:除了使用 button.tag 之外,是否有更简洁的方法来传递额外的 UIBarButtonItem 操作:选择器参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35519098/

相关文章:

ios - 64 位 iOS (A64) 上的汇编器

java - 带有 setter 和 setter 的基本 JAVA 应用程序,并将整数加 1

javascript - 使用简单的 jQuery 选择器

ios - 如何滚动到 UIScrollview 中的 UIButton 位置

ios - iOS7 中的 UITabBar 角标(Badge)位置不正确

ios - swift : TableView cell size changing on run time

swift - 尽管在 Swift 3 上转换为 AnyObject,类型 "Any"没有下标成员?

swift - 为什么 range() 和 sequenceOf() 在 RxSwift 中与 flatMap 的行为不同

html - 如何仅设计 DIV 的第二个 UL

ios - 选择何时在 iPad 上使用 Flurry 发送数据