2

セグエの助けを借りずに、ビューコントローラーから別のビューコントローラーに Bool 値を渡したいです。だから私は紹介してデリゲートを獲得しました。

アプリにデリゲートを適用しました。しかし、Delegate メソッドは呼び出されていません。どこで間違いを犯しているのかわかりません。

だから私を助けてください。

MainViewController

class MainViewController: UIViewController, WriteValueBackDelegate {

    @IBOutlet weak var LoginButton: UIButton!
    var LoggedInL :Bool?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func writeValueBack(value: Bool) {
        println("Delegate Method")
        if (value == true){
            LoginButton.setTitle("My Profile", forState:UIControlState.Normal)
        }
    }

2 番目のビュー コントローラー

class LoginController: UIViewController {

    @IBOutlet weak var LoginLabel: UILabel!
    @IBOutlet weak var email: UITextField!

    @IBOutlet weak var pwd: UITextField!
    var LoggedInL :Bool?

    var mydelegate: WriteValueBackDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func onSubmit(sender: AnyObject) {

         Alamofire.request(.GET, "http://www.jive.com/index.php/capp/user_verification/\(email.text)/\(pwd.text)")
            .responseJSON { (_, _, data, _) in

                println(data)
                let json = JSON(data!)
                let name = json["first_name"].stringValue
                let status = json["valid_status"].intValue
                println(status)
                var e = self.email.text
                println(e)
                self.LoginLabel.text = "Hey \(name)!"

                if status == 1{
                    println("Correect")
                     self.LoggedInL = true
                    self.mydelegate?.writeValueBack(true)

                }else {
                     self.LoggedInL = false
                    println("Error")
                }
        }
        navigationController!.popViewControllerAnimated(true)
    }
}

protocol WriteValueBackDelegate {
    func writeValueBack(value: Bool)
}
4

2 に答える 2

5

デリゲートを初期化していませんし、その必要もありません。通常、デリゲートは非同期コールバック用です。代わりにそれを行います:

class MainViewController: UIViewController {

    static var sharedInstace : MainViewController?;
    @IBOutlet weak var LoginButton: UIButton!
    var LoggedInL :Bool?

    override func viewDidLoad() {
        super.viewDidLoad()
        MainViewController.sharedInstace = self; //this is better from init function
    }

    func writeValueBack(value: Bool) {
        println("Delegate Method")
        if (value == true){
            LoginButton.setTitle("My Profile", forState:UIControlState.Normal)
        }
    }
}

ログインビューコントローラーで

MainViewController.sharedInstance?.writeValueBack(true)
于 2015-08-03T09:12:07.197 に答える
2

おそらくインスタンスMainViewControllerの参照が必要であり、デリゲートを設定しますLoginControllerIBOutletviewDidLoad

@IBOutlet weak var loginController : LoginController!

override func viewDidLoad() {
    super.viewDidLoad()
    loginController.mydelegate = self
}
于 2015-08-03T09:35:44.397 に答える