VIewControllerにTestViewControllerのデリゲート(myDelegate)を設定する際に、
VIewDataのgetViewControllerメソッドを仲介する形式で実現させたいのですが
下記ソースの通り、ViewControllerの topController.myDelegate = self
でビルドエラーとなります。
デリゲートの使い方が間違っているのでしょうか?そもそもメソッド(getViewController)で
デリゲートを渡す方法はできないのでしょうか?
VIewController.swift
import UIKit class ViewController: UIViewController,myDelegate{ //ビューデータ読み込み var viewdata = ViewData() override func viewDidLoad() { super.viewDidLoad() var controllers:[UIViewController]=[] let topController = viewdata.getViewController("TEST") topController.myDelegate = self // ←ここでビルドエラー【Value of type 'UIViewController' has no member 'myDelegate’】 controllers.append(topController) ~~~~~~ } func myTest() { ~~~~~~ } }
VIewData.swift
import UIKit class ViewData{ func getViewController(_ text:String)->UIViewController{ switch text{ case “TEST”: let storyboard:UIStoryboard = UIStoryboard(name:"Main",bundle:nil) let TestView = storyboard.instantiateViewController(withIdentifier: "Test") as! TestViewController return TestView default: } } }
TestViewController.swift
import UIKit class TestViewController:UITableViewController{ var myDelegate:myDelegate? override func viewDidLoad() { super.viewDidLoad() ~~~ } ~~~ func A(){ myDelegate?.myTest() // ここの実行結果をViewControllerで受けたい } }
myDelegate.swift
import UIKit protocol myDelegate{ func myTest() }
回答3件
あなたの回答
tips
プレビュー