当前位置: 首页 > 面试题库 >

如何在Swift中设置UIBarButtonItem的操作

东方嘉木
2023-03-14
问题内容

如何在Swift中设置自定义UIBarButtonItem的操作?

以下代码将按钮成功放置在导航栏中:

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:nil)
self.navigationItem.rightBarButtonItem = b

现在,我想func sayHello() { println("Hello") }在触摸按钮时打电话。到目前为止,我的努力:

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:sayHello:)
// also with `sayHello` `sayHello()`, and `sayHello():`

和..

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(sayHello:))
// also with `sayHello` `sayHello()`, and `sayHello():`

和..

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:@selector(self.sayHello:))
// also with `self.sayHello` `self.sayHello()`, and `self.sayHello():`

请注意,它sayHello()出现在智能感知中,但不起作用。

谢谢你的帮助。

编辑:为后代,以下作品:

var b = UIBarButtonItem(title: "Continue", style: .Plain, target: self, action:"sayHello")

问题答案:

从Swift 2.2开始,针对编译时检查的选择器有一种特殊的语法。它使用语法:#selector(methodName)

Swift 3及更高版本:

var b = UIBarButtonItem(
    title: "Continue",
    style: .plain,
    target: self,
    action: #selector(sayHello(sender:))
)

func sayHello(sender: UIBarButtonItem) {
}

如果不确定方法名称应为什么样,则可以使用copy命令的特殊版本,该版本非常有用。将光标放在基本方法名称的某个位置(例如sayHello),然后按
Shift+ Control+ Option+ C。这样就可以在键盘上粘贴“符号名称”。如果还按住Command,它将复制“
Qualified Symbol Name”(合格符号名称),其中还将包括类型。

Swift 2.3:

var b = UIBarButtonItem(
    title: "Continue",
    style: .Plain,
    target: self,
    action: #selector(sayHello(_:))
)

func sayHello(sender: UIBarButtonItem) {
}

这是因为在进行方法调用时,在Swift 2.3中不需要第一个参数名称。

您可以在swift.org上了解有关语法的更多信息:https ://swift.org/blog/swift-2-2-new-
features/#compile-time-checked-
selectors



 类似资料:
  • 我想在不同的情况下芳香地改变一些约束。 声明来自情节提要的约束: 这是我的代码,我想在其中更改约束: 但是约束仍然没有改变。 这是我的手机ForRowAt func: 提前感谢您的帮助!

  • 问题内容: 如何快速获取rightbarbuttonItem的框架?我发现了这一点:UIBarButtonItem:如何找到它的框架?但是它说不能将NSString转换为UIView,或者不能将NSString转换为String: 目标是删除rightBarButtonItem,添加一个imageView,然后使用fadeOut效果对其进行移动。 谢谢 问题答案: 您应该像这样尝试: 编辑(快速3

  • 问题内容: 我想要一个使用样式的单元格。 我最初的Objective-C代码是: 在已经在SO上搜索了几个问题之后,我想像这样在Swift中编写它: 但这并不能让我说我想要一种风格。所以我尝试了这个: 这给了我一个牢房,但是却没有让我。 我已经研究了更多内容,并观看了此视频教程,但是他创建了一个单独的对象,我认为这是不必要的,因为我之前在Obj- C中实现了相同的效果。 有任何想法吗?谢谢。 问题

  • 问题内容: 在早期版本的Swift中,可以使用以下代码创建延迟: 但现在,斯威夫特3时,Xcode自动改变6个不同的东西,但随后出现以下错误:“无法转换到预期值又名”。 在Swift 3中运行一系列代码之前,如何创建延迟? 问题答案: 经过大量研究,我终于找到了答案。 这会在Swift 3和Swift 4中创建所需的“等待”效果。

  • 问题内容: 我想制作一个UIImageView动画。我声明了NSLayoutConstraintin viewDidLoad并使用了以下代码: 为什么我的图像不动? 问题答案: 在您按下时viewDidLoad,约束引擎尚未 应用,并且视图的起始位置尚未建立。 因此,可以随时在中添加原始约束viewDidLoad,但是您 需要将推迟到animateWithDuration该过程的后面(例如 vie

  • 问题内容: 我正在尝试为我的应用程序设置推送通知系统。我有服务器和开发人员许可证来设置推送通知服务。 我目前正在Swift中运行我的应用。我希望能够从服务器远程发送通知。我怎样才能做到这一点? 问题答案: 尽管可以很好地处理推送通知,但我仍然相信可以立即共享完整的完整案例以简化操作: 要注册APNS的应用程序,(在AppDelegate.swift中的didFinishLaunchingWithO