gpt4 book ai didi

ios - 为什么在使用 init(barButtonSystemItem, target, action) 初始化时 UIBarButtonItem 的目标设置为 nil?

转载 作者:行者123 更新时间:2023-11-28 12:37:47 26 4
gpt4 key购买 nike

这个初始化器

convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, 
target: Any?,
action: Selector?)

according to the documentation接受一个目标,然后在返回部分他们解释说它实际上设置为nil。他们为什么这样做?

我的意思是他们确实这样做了,因为这是让我发疯的事情,我不得不写这样的代码:

class GameViewController: UIViewController {


let pauseItem = UIBarButtonItem(barButtonSystemItem: .pause, target: self, action: #selector(GameViewController.pauseButtonTouchUp))
let playItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: #selector(GameViewController.pauseButtonTouchUp))



override func viewDidLoad() {
super.viewDidLoad()

self.pauseItem.target = self
self.playItem.target = self

. . .
}

否则 Action 不会被触发。为什么他们认为接受一个参数并故意忽略它是个好主意?

编辑:我使用 nil-self 来初始化对象是我的错(正如下面的回答中所指出的)。然而,这个问题仍然存在。因为为什么他们声明目标设置为 nil 而实际上不是?

最佳答案

target nil,因为你在 Controller 初始化之前设置了目标。你应该使用这样的东西:

class GameViewController: UIViewController {
var pauseItem: UIBarButtonItem? = nil
var playItem: UIBarButtonItem? = nil

override func viewDidLoad() {
super.viewDidLoad()

playItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: #selector(GameViewController.pauseButtonTouchUp))
pauseItem = UIBarButtonItem(barButtonSystemItem: .pause, target: self, action: #selector(GameViewController.pauseButtonTouchUp))
}
}

关于ios - 为什么在使用 init(barButtonSystemItem, target, action) 初始化时 UIBarButtonItem 的目标设置为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40339513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com