为啥 Swift 3 不能识别我的按钮点击?
Posted
技术标签:
【中文标题】为啥 Swift 3 不能识别我的按钮点击?【英文标题】:Why Doesn't Swift 3 recognize me button tap?为什么 Swift 3 不能识别我的按钮点击? 【发布时间】:2017-03-21 21:40:33 【问题描述】: let playButton: UIButton =
let button = UIButton()
let image = UIImage(named: "VideoIcon.png") as UIImage?
button.backgroundImage(for: .normal)
button.addTarget(self, action: #selector(pressBackButton(button:)), for: .touchUpInside)
button.setImage(image, for: .normal)
return button
()
func pressBackButton(button: UIButton)
print("test")
if let playVideoButtonURL = post?.videourl
let player = AVPlayer(url: playVideoButtonURL as URL)
let playerLayer = AVPlayerLayer(player:player)
playerLayer.frame = CGRect(x: 100, y: 200, width: 100, height: 100)
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
self.layer.addSublayer(playerLayer)
player.play()
即使视频代码错误,它仍然应该打印测试,但它没有,这很奇怪。我觉得选择器可能有问题,但我目前不知道它可能有什么问题。
【问题讨论】:
在 self 初始化之前不能访问 self 的属性(函数)。这意味着您无法从属性初始化程序块访问pressBackButton
。
你知道我将如何解决它吗?我对 swift 是半新的。我尝试将功能放在按钮上方,但它仍然没有在控制台中显示任何内容。
【参考方案1】:
在初始化器之外访问 self 中的函数或属性。
class TestViewController: UIViewController
let playButton: UIButton =
let button = UIButton()
let image = UIImage(named: "VideoIcon.png") as UIImage?
button.backgroundImage(for: .normal)
button.setImage(image, for: .normal)
return button
()
override func viewDidLoad()
super.viewDidLoad()
button.addTarget(self, action: #selector(pressBackButton(button:)), for: .touchUpInside)
【讨论】:
所以我试过了,但是如果我将播放按钮移到那里,我会使用未解析的标识符 pressbackbutton,因为它在 videofeedcell 类中,它是一个 uicollectionviewcell,它需要在那里工作。 @Tim 您的意思是playButton
在VideoFeedCelll
中,并且您想在按下按钮时调用UIViewController
中的方法?如果是这样,您需要在配置单元格时添加目标,例如cellForItem
。【参考方案2】:
而不是做:
let playButton: UIButton =
...
...
return button
()
这不起作用(因为您试图在错误的时间创建 playButton
- 这是在视图加载之前或即将出现之前)
在您的viewDidLoad
或viewWillAppear
中,创建按钮,定义目标并简单地将其添加为子视图。
override func viewDidLoad()
super.viewDidLoad()
let button = UIButton()
if let image = UIImage(named: "VideoIcon.png") as UIImage?
button.backgroundImage(for: .normal)
button.addTarget(self, action: #selector(pressBackButton(button:)), for: .touchUpInside)
button.setImage(image, for: .normal)
self.addSubview(button)
将按钮添加为子视图increments the retain count(即它不会消失),但如果您想将其作为属性保留,只需将其声明为:
var playButton : UIButton?
然后在viewDidLoad
的末尾设置playButton = button
。
【讨论】:
以上是关于为啥 Swift 3 不能识别我的按钮点击?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像