デリゲートを使用してあるクラスから別のクラスにデータを送信しようとしています。ストーリーボードを使用しないクラス間でデータを渡す(委任)
私は、このクラスでデリゲートを設定します。
class AnswerViewController: UIViewController, tagToIndexDelegate{
override func viewDidLoad() {
super.viewDidLoad()
getDictionary()
}
func getDictionary() {
let myCell = MyCell()
myCell.delegate = self
print(123)
}
func finishPassing(dictionary: Dictionary<Int, Int>) {
print(dictionary)
}
}
そして、このクラスでデリゲートを介してデータを取得する:
protocol tagToIndexDelegate: class {
func finishPassing(dictionary: Dictionary<Int,Int>)
}
class MyCell: UITableViewCell, YSSegmentedControlDelegate{
var delegate: tagToIndexDelegate?
func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) {
tagToIndex[actionButton.tag] = index
delegate?.finishPassing(dictionary: tagToIndex)
}
}
私は印刷するdictionary
値を取得することができていませんAnswerViewController
クラス。 AnswerViewController
は確実に動作しています。なぜなら、このビューコントローラにボタンを押してprintステートメントが実行されると(ボタンが押されるまで、AnswerViewController
のインスタンスは作成されないためです)。
私はこのプロジェクトでストーリーボードを使用していないことに留意する必要があります。そうでない場合は、ストーリーボードセグーと一緒にデリゲートを使用してタスクを完了できます。
デリゲートの前にブレークポイントを追加すると、?.finishPassing(dictionary:tagToIndex)をチェックして、answerViewControllerがデリゲートとして正しく割り当てられているかどうかを確認できます。この時点でtagToIndexに含まれている内容を確認してください。試してみて、結果を教えてください。 – 3stud1ant3
「MyCell」はUITableViewにあるはずですか?デリゲートを 'cellForRowAt:'に配置する場所を設定する必要があります。 – Paulw11
@ Paulw11それを試しましたが、実際にはうまくいきました。問題は、 'cellForRowAt'のデリゲートを設定した後、' tagToIndex'にアクセスするためにスタブを使用できる唯一の場所が 'TableViewController'クラスの中にあることです。これは、私が 'answerViewController'に' tagToIndex'を必要としていると考えるとあまり役に立ちません。私は何か基本的なことを逃しているかもしれない、私はこれにかなり新しいです。 –