在 swift 中以编程方式按下 UIBarButtonItem?
Press UIBarButtonItem programmatically in swift?
我有一个条形按钮项,我想以编程方式按下,基本上相当于
buttonObj.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
但作为栏按钮项
编辑:我忘了说,我不能简单地调用按钮的操作方法,因为我正在使用 SWRevealViewController 库并在条形按钮项目上使用它们的 "revealToggle:"
操作,我不知道怎么自己调用。
如果您查看 Objective-C 个等效问题,您会看到使用 performSelector:
的实现。在 Swift 中,您无权访问此方法。这是 Apple 的官方说法:
The performSelector: method and related selector-invoking methods are not imported in Swift because they are inherently unsafe.
您可以改用 UIApplication.sendAction(_:to:from:forEvent:)
来解决这个问题。从技术上讲,您也应该在 Objective-C 中执行此操作。
假设您的 UIBarButtonItem
定义为 barButtonItem
。以下代码可以满足您的要求。
UIApplication.sharedApplication().sendAction(barButtonItem.action, to: barButtonItem.target, from: self, forEvent: nil)
Swift 4(和 3)句法
UIApplication.shared.sendAction(barButtonItem.action!, to: barButtonItem.target, from: self, for: nil)
工作于Swift 5:
_ = button.target?.perform(button.action, with: nil)
我有一个条形按钮项,我想以编程方式按下,基本上相当于
buttonObj.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
但作为栏按钮项
编辑:我忘了说,我不能简单地调用按钮的操作方法,因为我正在使用 SWRevealViewController 库并在条形按钮项目上使用它们的 "revealToggle:"
操作,我不知道怎么自己调用。
如果您查看 Objective-C 个等效问题,您会看到使用 performSelector:
的实现。在 Swift 中,您无权访问此方法。这是 Apple 的官方说法:
The performSelector: method and related selector-invoking methods are not imported in Swift because they are inherently unsafe.
您可以改用 UIApplication.sendAction(_:to:from:forEvent:)
来解决这个问题。从技术上讲,您也应该在 Objective-C 中执行此操作。
假设您的 UIBarButtonItem
定义为 barButtonItem
。以下代码可以满足您的要求。
UIApplication.sharedApplication().sendAction(barButtonItem.action, to: barButtonItem.target, from: self, forEvent: nil)
Swift 4(和 3)句法
UIApplication.shared.sendAction(barButtonItem.action!, to: barButtonItem.target, from: self, for: nil)
工作于Swift 5:
_ = button.target?.perform(button.action, with: nil)