【问题标题】:AddTarget for custom view UIView is not working自定义视图 UIView 的 AddTarget 不起作用
【发布时间】:2020-10-12 23:36:24
【问题描述】:

我有一个自定义视图类如下

class AudioPlayerView: UIView {
@IBOutlet weak var playAudio: UIButton!
@IBOutlet weak var audioSlider: UISlider!
@IBOutlet weak var deleteAudio: UIButton!
@IBOutlet weak var audioURL: UILabel!

override init(frame: CGRect) {
    super.init(frame: frame)
    self.isUserInteractionEnabled = true
    commonInit()
}
required init?(coder: NSCoder) {
    super.init(coder: coder)
}
func commonInit(){
    let viewFromXIB = Bundle.main.loadNibNamed("AudioPlayerView", owner: self, options: nil)![0] as! UIView
    viewFromXIB.frame = self.bounds
    addSubview(viewFromXIB)
}

}

我在视图控制器的滚动视图中以编程方式添加上述视图,并为按钮设置目标,如下所示

func addRecorderdAudioPlayerUI(){
    audioRecorderControlUIView.isHidden = true
    let audioPlayerView = AudioPlayerView()
    audioPlayerView.frame = CGRect(x: 0, y: 0, width: 398, height: 50)
    
    audioPlayerView.audioSlider.addTarget(NoteViewController.self, action: #selector(changeAudioTime), for: .valueChanged)
    audioPlayerView.playAudio.addTarget(NoteViewController.self, action: #selector(playPauseAudioBtnCLicked), for: .touchUpInside)
    audioPlayerView.deleteAudio.addTarget(NoteViewController.self, action: #selector(deleteAudioBtnCLicked), for: .touchUpInside)
    audioPlayerView.audioURL.text = recordingsURLsToSave.last
    
    
    audioContainerScrollView.addSubview(audioPlayerView)
    scrollViewContentWidth += audioPlayerView.frame.width
    audioContainerScrollView.contentSize = CGSize(width: scrollViewContentWidth, height: 50)
}

我可以添加视图,但 .touchUpInside 目标不起作用。

【问题讨论】:

  • 将您的NoteViewController.self 更改为self 并尝试。
  • 请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。

标签: ios swift uiview uiviewcontroller


【解决方案1】:

你需要

1- 将NoteViewController.self 替换为self

audioPlayerView.audioSlider.addTarget(self, action: #selector(changeAudioTime), for: .valueChanged)
audioPlayerView.playAudio.addTarget(self, action: #selector(playPauseAudioBtnCLicked), for: .touchUpInside)
audioPlayerView.deleteAudio.addTarget(self, action: #selector(deleteAudioBtnCLicked), for: .touchUpInside)

2- 添加这个方法

class func getInstance() -> AudioPlayerView {
  let viewFromXIB = Bundle.main.loadNibNamed("AudioPlayerView", owner: self, options: nil)![0] as! AudioPlayerView   
  return  viewFromXIB 
}

然后替换

let audioPlayerView = AudioPlayerView()

let audioPlayerView = AudioPlayerView.getInstance()

【讨论】:

  • 尝试了这种方法,但没有运气。它甚至没有达到断点也不起作用
  • 我试过这个,它抛出了异常。异常 NSException * "[ setValue:forUndefinedKey:]: 这个类对于键 audioSlider 不符合键值编码。"
  • 确保将类名AudioPlayerView 分配给 xib 文件
  • 我确保所有内容都正确链接。我完全按照你说的做了。但是,再一次,没有运气。它甚至没有达到断点@Sh_Khan
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多