2017-04-06 7 views
2

私はセルのテーブルを持っていて、それぞれ別々のオブジェクト(チェーン)を表示しています。これらのセルのそれぞれにボタンを追加しようとしています。ボタンは、そのセルのチェーンを引数としてアクションを呼び出すか、少なくとも何らかの形でそれを渡します。RubyMotion - ボタンを押したときにパラメータを渡す

def select_chain(sender) 
    unselect_old_chain 
    chain = Chain.find(sender.tag) 
    chain.selected = true 
    chain.save 
    cdq.save 
end 

def tableView(tableView, cellForRowAtIndexPath: indexPath) 
    cell = tableView.dequeueReusableCellWithIdentifier(ChainCell::ID, forIndexPath: indexPath) 
    cell.label_title.text = data_source[indexPath.row].title 
    cell.chain = data_source[indexPath.row] 
    button = UIButton.buttonWithType(UIButtonTypeCustom) 
    button.setTitle 'Go!', forState: UIControlStateNormal 
    button.tag = cell.chain.id 
    button.addTarget self, action: :select_chain, forControlEvents: UIControlEventTouchUpInside 
    button.backgroundColor= UIColor.greenColor 
    button.frame = CGRectMake(cell.frame.origin.x + 210, cell.frame.origin.y + 10, 80, 20) 
    cell.contentView.addSubview(button) 
    cell 
end 

私は次を読みました:私のための2つのソリューションを提供してい

How to pass parameters via the selector/action?

、どちらの作品次のように私のコードです。最初はインスタンス変数を変数と同じに設定していますが、複数のセルがあるので複数のインスタンス変数が必要になり、すばやく面倒になるでしょう。私は単純に使用している見ることができる限り

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ChainsTable select_chain]: unrecognized selector sent to instance 0x1169b9000' 

:提示

他の解決策は、私は私のコードでimplimentしようとしたタグ属性を、使用していたが、これはエラーをスローしますChain.find(sender.tag)を使ってChainを検索しようとするのに整数ですが、これは動作しません。

どのように私はこの方法を働かせるか、または他のアプローチを得ることができますについてのアドバイスは非常に感謝しています。

ありがとうございます。

答えて

1

私はあなたがこのようにそれを記述する必要があると思う:

button.addTarget self, action: 'select_chain:', forControlEvents: UIControlEventTouchUpInside 

セレクタとして記号を使用しないでください。

関連する問題