2017-04-06 14 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 

나는 다음을 통해 읽었습니다 : 나를 위해 두 가지 솔루션을 제공

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 

이 셀렉터로 기호를 사용하지 마십시오.