我想创建一个类来添加 UIButton Action ,然后 viewcontroller 可以调用这个类来创建 Action 。
但是错误消息告诉我“无法识别的选择器发送到实例”
我该如何修复它们?
class MYController: UIViewController{
@IBOutlet weak var pptMode: UIButton!
@IBOutlet weak var videoMode: UIButton!
@IBOutlet weak var meetingMode: UIButton!
@IBOutlet weak var videoMeeting: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
ModeChange().modeChangeUtil(self,pptMode:pptMode, videoMode: videoMode, meetingMode: meetingMode, videoMeeting: videoMeeting)
}
}
class ModeChange {
func modeChangeUtil(vc:UIViewController,pptMode:UIButton,videoMode:UIButton,meetingMode:UIButton,videoMeeting:UIButton){
pptMode.addTarget(vc, action: "modeTouched:", forControlEvents:UIControlEvents.TouchUpInside)
pptMode.tag = modeButtonTag.ppt.rawValue
videoMode.addTarget(vc, action: "modeTouched:", forControlEvents:UIControlEvents.TouchUpInside)
videoMode.tag = modeButtonTag.video.rawValue
meetingMode.addTarget(vc, action: "modeTouched:", forControlEvents:UIControlEvents.TouchUpInside)
meetingMode.tag = modeButtonTag.meeting.rawValue
videoMeeting.addTarget(vc, action:"modeTouched:", forControlEvents:UIControlEvents.TouchUpInside)
videoMeeting.tag = modeButtonTag.videoMeeting.rawValue
}
enum modeButtonTag: Int {
case ppt
case video
case meeting
case videoMeeting
}
func modeTouched(sender:UIButton){
let modeCmd:ModeCommand = ModeCommand(device: Mode(onoffUrl: OfficeConstants.MeetingRoom3A.MODE))
switch sender.tag {
case modeButtonTag.ppt.rawValue:
modeCmd.modeStatus = .PPT
case modeButtonTag.video.rawValue:
modeCmd.modeStatus = .Video
case modeButtonTag.meeting.rawValue:
modeCmd.modeStatus = .Meeting
case modeButtonTag.videoMeeting.rawValue:
modeCmd.modeStatus = .VideoMeeting
default: break
//do nothing
}
modeCmd.execute()
}
}
最佳答案
您传递了错误的参数!
addTarget
方法有 3 个参数:
target
是选择器将发送到的实例。action
是一个选择器forControlEvents
是你要处理的事件
解释完这些,你能找出你代码中哪个参数有问题吗?
这是目标
!
由于选择器将被发送到 target
,因此 target 必须有一个名为 modeTouched:
的方法。
在您的方法调用中,您传入了 vc
作为 target
。这意味着选择器 modeTouched:
必须发送到 vc
。但是,您没有在 vc
中定义 modeTouched:
方法!这就是错误发生的原因。
我猜您想将选择器发送到 ModeChange
类中的 modeTouched:
方法。因此,目标应该是 self
:
pptMode.addTarget(self, action: #selector(modeTouched:), forControlEvents:UIControlEvents.TouchUpInside)
这应该可以解决问题!
关于swift - 如何在 Swift 的自定义类中创建 UIButton 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37496985/