2017-04-12 22 views
1

나는 stackoverflow를 많이보고 있었으며 위임과 관련된 많은 다른 질문을 읽었지만 아직 내 문제를 해결하지 못했습니다. 내 stepperAction (tableview 셀 안에 있음)을 클릭 할 때마다 내 BuyStats 클래스의 레이블을 변경하려고합니다. 그러나 지금까지는 스테퍼를 클릭해도 효과가 없습니다. 어떻게 든 대리자를 설정하려면 BuyStats.viewDidLoad()에서 뭔가가 필요하다고 생각하지만 이해하지 못하고 있습니다. 이것은 누군가에게 쉬운 일일 수 있습니다. 어떤 도움을 주셔서 감사합니다.신속한 위임 - Tableview 셀의 스테퍼를 사용하여 별도의 클래스에서 레이블 업데이트

protocol SetRemainingValue : class { 
func setValue(amount: Double) 
} 
} 

//

class BuyStatsCell: UITableViewCell{ 

weak var setRemaining : SetRemainingValue? 

@IBAction func stepperAction(_ sender: UIStepper) { 

    setRemaining?.setValue(amount: sender.value) 
} 

//

class BuyStats: UIViewController, SetRemainingValue { 

    @IBOutlet weak var spendAmount: UILabel! 

override func viewDidLoad(){ 

} 

func setValue(amount: Double) { 

    spendAmount.text = amount 

} 

}

+0

어디서'BuyStatsCell' 개체를 만들었습니까 ?? 'BuyStats' 클래스의 어딘가에'obj.setRemaining = self'를 설정해야합니다. 그렇지 않으면 누가'BuyStatsCell'의'delegate'를 정의하지 않았고 당신이 위임을 통해 전달하는 메시지는 효과가 없습니다. 이러한 프로토콜과 대리자가 어떻게 작동하는지 더 자세히 알기 위해 [이 대답] (http://stackoverflow.com/a/41689281/3687801)을 살펴보십시오. – nayem

답변

0

동적 UITableView를 사용하는 경우, 당신은 당신의 cellForRowAtIndexPath 내부에 다음과 같은 시도 할 수 있습니다 :

  1. dequeueCellWithReuseIdentifier으로 셀을 초기화 할 때 클래스 변수에 액세스하려면 BuyStatsCell (어쩌면 as! BuyStatsCell)으로 캐스팅하십시오.
  2. 대표단을 cell.setRemaining = self으로 설정하십시오. self을 사용하면 tableView의 cellForRowAtIndexPathBuyStats viewController 클래스에 있다고 가정합니다. 그렇지 않다면, BuyStats 객체에 대한 참조를 tableView의 코드가있는 클래스에서 가져와 cell.setRemaining = /*yourBuyStatsObjectReferenceGoesHere*/과 같은 self 대신 해당 참조를 사용하고 싶을 것입니다.

희망이 있습니다.

+0

고맙습니다. 나는 내 tableview 코드를 얻기 위해 참조를 두 번 통과시켜야한다는 것을 알아 냈습니다. –