【问题标题】:Selector not working on my swift UIBarButtonItem选择器不适用于我的 swift UIBarButtonItem
【发布时间】:2015-09-26 20:44:08
【问题描述】:

我正在编写一个待办事项列表类型的应用程序,以便快速学习 iOS 开发。我在右侧的导航栏上有一个设置按钮,每当有人单击表格视图顶部的按钮时,他们都可以将新项目添加到他们的列表中。这会导致“取消”按钮出现在栏的左侧,“添加”按钮出现在右侧。然而,当这个人完成后,这些按钮就会消失,所以我以编程方式重新创建设置按钮,并调用一个应该调用 segue 的函数。

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: nil, action: Selector("showSettings:"))

这是在导航栏上创建按钮的代码(它确实被创建了)

 func showSettings(sender: AnyObject?) {
    print("segueShouldBeDone!")
    performSegueWithIdentifier("showSettings", sender: sender)
}

这就是应该调用 segue 的函数(我添加了 print 以查看它是否至少被调用了,但实际上没有)。

我在代码的另一个地方也遇到过同样的问题,但我已经放弃修复它,因为那时它对我来说并不那么重要。但是现在它干扰了应用程序的工作方式,所以我想知道如何解决它。

任何帮助都会很棒。

【问题讨论】:

  • @LeoDabus 虽然你是对的,我应该这样做,但它实际上并没有改变任何东西,这让我感到困惑。图片已经显示了。

标签: ios swift selector


【解决方案1】:

没有调用您的 showSettings: 选择器,因为您为条形按钮项目的目标指定了 nil 而不是 self。将行更改为:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showSettings:"))

这假设showSettings: 方法在包含这行代码的同一个类中。

阅读此初始化程序的文档,特别是有关 target 参数的信息。

【讨论】:

  • 是的,确实解决了它。但即使我的showSettings 函数没有使用任何参数(并且我使用“showSettings”作为选择器),它也不起作用。 segue 发件人必须与nil 不同吗?我在另一个地方使用它(如问题中所述),它没有接受任何参数,并且该函数也没有被调用。这让我很困惑,因为我用它来创建带有target: nil 的“添加”和“取消”按钮,而且它们工作正常。
  • self 而不是 nil 传递给 UIBarButtonItem 初始化程序与传递给您的 showSettings: 方法的 sender 参数完全无关,也与转场。
  • 为什么我的其他 UIBarButtonItems 有目标 nil 时可以工作,而其他两个没有?有什么想法吗?
  • 他们不可能。如果您将nil 作为target 传递,则永远不会调用selector。除非将 target 设置为适当的非零值,否则它不能。
  • 这可能是 Swift 的一个错误吗?类似的东西?因为他们完全按照他们应该的方式工作,即使我将 nil 作为目标。我现在会改变它,以免在未来引起问题,但它们运行良好。无论如何,感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2015-03-30
相关资源
最近更新 更多