2017-04-13 11 views
0

xcode 8.2.1 & swift 3.私はView Controllerでuitableviewを利用します。私はそれをタップするとuiimageviewを取得します。ボタンを押してボタンアクションを実行するときにも同じ問題が発生します。uitableviewcellのuiimageviewをタップするとアプリケーションがクラッシュする

エラーがある:[:1620857 3752] - [sampleToRunBuild.TapViewController TappedOnImage:]:

sampleToRunBuild 18:未認識セレクタインスタンス0x141e07bc0 2017年4月13日18に送ら00.531126 sampleToRunBuild [3752 : :1620857] * により、理由キャッチされない例外 'NSInvalidArgumentException' にアプリを終了 ' - [sampleToRunBuild.TapViewController TappedOnImage:]:認識されていない セレクタは、インスタンス0x141e07bc0に送られた' *まず投げコールスタック(0x18343d1b8 0x181e7455c 0x183444268 0x183441270 0x18333a80c 0x1898b3f80 0x1898b7688 0x18947e73c 0x18931d0f0 0x1898a7680 0x1898a71e0 0x1898a649c 0x18931b30c 0x1892ebda0 0x189ad575c 0x189acf130 0x1833eab5c 0x1833ea4a4 0x1833e80a4 0x1833162b8 0x184dca198 0x1893567fc 0x189351534 0x100065f30 0x1822f95b8)のlibC++ abi.dylib:タイプNSException

のキャッチされない例外で終結

私のコードは次のとおりです。

import UIKit 

class TapViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.delegate = self 
     tableView.dataSource = self 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "mycell") 

     let img: UIImageView = cell?.viewWithTag(1) as! UIImageView 
     let img2: UIImageView = cell?.viewWithTag(2) as! UIImageView 

     img.tag = indexPath.row 
     img2.tag = indexPath.row 

     img.isUserInteractionEnabled = true 
     img2.isUserInteractionEnabled = true 

     let tapped:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector(("TappedOnImage:"))) 
     tapped.numberOfTapsRequired = 1 
     tapped.delegate = self 
     img.addGestureRecognizer(tapped) 


     let tapped1:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector(("TappedOnImage:"))) 
     tapped1.numberOfTapsRequired = 1 
     tapped1.delegate = self 
     img.addGestureRecognizer(tapped1) 

     return cell! 
    } 

    func TappedOnImage(sender:UITapGestureRecognizer){ 
     print("tap on imageview") 
    } 
} 

This is storyboard screenshot

事前に感謝しますが...

答えて

1

あなたはもうSelector()を使用していない、あなたはSWIFT 3を使用している場合は

#selector(TapViewController.imageTapped(sender:)) 
+0

ありがとうございましたこれは私の仕事です –

+0

あなたの歓迎は私の答え@KunalMalveで応答してください –

0

を追加します代わりに#selector構文を使用してください。

let tapped1:UITapGestureRecognizer = 
    UITapGestureRecognizer(target: self, action: #selector(TappedOnImage)) 

あなたのコードが機能しなかった理由は、あなたがセレクタ文字列に引数のラベルsenderを追加するのを忘れていることです。これは、古い構文を使用することの短所の1つです。コンパイル時に間違いを教えてくれるわけではありません。新しい構文では、セレクタを間違って記述した場合にコンパイラエラーが発生し、引数ラベルを気にする必要がなくても、名前が必要になります。

0

を使用する必要がUITapGestureRecognizer

コード以下のような
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))) 
    imageView.isUserInteractionEnabled = true 
    imageView.addGestureRecognizer(tapGestureRecognizer) 


func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) 
{ 
    let tappedImage = tapGestureRecognizer.view as! UIImageView 

    // Your action 
} 
関連する問題