2016-10-11 12 views
1

私はこれまでにこの問題を抱えていましたが、ストーリーボードにボタンをつけていないか、機能が期待しているときにパラメータを渡していないことが原因です。今回はそれはどちらのものでもありません。パラメータを渡すときに認識されないセレクタ - TableViewセルのUIButton |スウィフトiOS

私はCellForRowAt方法でこのコードを使用して、私のテーブルビューセル内のボタンを作成しています:

let button = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50)) 
button.addTarget(self, action: Selector(("showPeople:")), for: UIControlEvents.touchUpInside) 
button.tag = indexPath.row 
cell.addSubview(button) 

と、私はそうのようなshowPeople方法宣言している:ボタンがある場合は

func showPeople(sender: UIButton) { 
    print("pressed") 
} 

を次のメッセージでプログラムがクラッシュしました:

showPeople: unrecognized selector sent to instance 

しかし、私はそうのようなメソッドを宣言する場合(パラメータ削除):

func showPeople() { 
    print("pressed") 
} 

をし、それは私が推測され正常に動作しますSelector(("showPeople"))にセレクタを変更するには、私は、パラメータを渡している方法に問題があることを意味します。なぜこれが起こっていますか?この関数はパラメータを期待しているため、:が必要です。

答えて

1

セレクタにsenderの部分がないようです。

が、この代わりに試してみてください:

スウィフトに2最初のパラメータ名は、外部署名に使用されていなかったためだ
button.addTarget(self, action: #selector(ViewController.showPeople(sender:)), for: .touchUpInside) 
+1

。したがって、swift 2で同じ 'showPeople(sender:UIButton)'メソッドを呼び出すには 'showPeople(button)'を行い、Swift 3ではshowPeople(sender:button)を呼び出さなければなりません。 – alexburtnik

+1

パラメータ名を省略するには、次のようにメソッドの実装でアンダースコアを追加する必要があります:func showPeople(_ sender:UIButton) – alexburtnik

関連する問題