2016-05-28 7 views
1

UIButtonアクションを追加するクラスを作成してから、viewcontrollerがこのクラスを呼び出してアクションを作成できます。SwiftのカスタムクラスでUIButtonアクションを作成する方法

しかし、エラーメッセージは、私はそれらを修正するにはどうすればよい

「認識されていないセレクタがインスタンスに送信された」私に言いましたか?

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() 
    } 
} 
+0

カスタムクラスでUIbuttonアクションコンセントを使用していたら、それを削除してください.cz私は同じ問題に直面していました。 –

答えて

0

不適切なパラメータが渡されました。

addTarget方法は、3つのパラメータを取る:

  1. targetをセレクタが送信される先のインスタンスです。
  2. actionは、セレクタ
  3. forControlEventsであるあなたはこれらを説明した後

を処理するイベントで、あなたのコード内で間違っているパラメータを見つけ出すことができますか?

これはtargetです!

セレクタはtargetに送信されるため、ターゲットにはmodeTouched:というメソッドが必要です。

targetとしてvcを渡しました。つまり、セレクタmodeTouched:vcに送信する必要があります。ただし、vcmodeTouched:メソッドを定義していませんでした。そのため、エラーが発生しました。

セレクタをModeChangeクラスのmodeTouched:メソッドに送信したいと思います。したがって、ターゲットはselfである必要があります。

pptMode.addTarget(self, action: #selector(modeTouched:), forControlEvents:UIControlEvents.TouchUpInside) 

これで解決します。

+0

swift2でsuggetionコードを使用しようとしました。 pptMode.addTarget(self、action: "modeTouched:"、forControlEvents:UIControlEvents.TouchUpInside) しかし、動作しません。 – cici

+0

私は別の方法を試みましたが、それでも動作しません。 pptMode.addTarget(自己、アクション:#selector(modeTouched(_ :))、forControlEvents:UIControlEvents.TouchUpInside) @objc FUNC modeTouched(送信者:UIButton){} – cici

関連する問題