2017-04-12 5 views
1

私はstackoverflowをたくさん見ていて、委任に関するさまざまな質問をたくさん読んでいますが、私はまだ問題を解決することができませんでした。私はステッパーアクション(テーブルビューのセルの中にあります)をクリックするたびに、私の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

あなたはあなたのcellForRowAtIndexPath内で次のことを試してみてください、ダイナミックUITableViewを使用している場合:

  1. dequeueCellWithReuseIdentifierでセルを初期化するときは、BuyStatsCell(多分as! BuyStatsCell)とキャストしてクラス変数にアクセスします。
  2. 委任をcell.setRemaining = selfで設定します。 selfの使用は、あなたのtableViewのcellForRowAtIndexPathBuyStats viewControllerクラスの内側にあることを前提としています。そうでない場合は、BuyStatsオブジェクトの参照をtableViewのコードが存在するクラスに取得し、cell.setRemaining = /*yourBuyStatsObjectReferenceGoesHere*/のようにselfの代わりにその参照を使用することをお勧めします。

希望があれば。

+0

ありがとう、これはうまくいきました!私は私のテーブルビューのコードにそれを得るために参照を2回渡さなければならなかったことを理解しました。 –

関連する問題