我的协议没有打电话

时间:2015-08-28 05:33:42

标签: ios iphone swift protocols

我正在使用协议进行调用方法但我的方法没有调用。我有任何使用的例子。

这是我的代码:

的ViewController

    class ViewController: UIViewController {
      override func viewDidLoad() {
        super.viewDidLoad()
                // Do any additional setup after loading the view.
    }


extension ViewController :ViewController1Delegate
{
    func hello()
    {
        println("hbgyguyg");
    }
}

在View Controller 1中<​​/ p>

import UIKit
@objc
protocol ViewController1Delegate
{
   optional func hello()
}
class ViewController1: UIViewController {
 var delegate: ViewController?
    override func viewDidLoad() {
        super.viewDidLoad()
                    delegate?.hello()
             }

}

请帮助,我是Swift的新手。任何帮助都会得到帮助。在此先感谢

1 个答案:

答案 0 :(得分:1)

示例演示。

ViewController文件

import UIKit

class ViewController: UIViewController, PopUpViewControllerDelegate
{
    var popupVC: PopUpViewController!;

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.view!.backgroundColor = UIColor.whiteColor();

        self.popupVC = PopUpViewController();
        self.popupVC.delegate = self;


        self.showPopUpVC();
    }

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


    func popUpViewControllerDidPressOK(popUpVC: PopUpViewController) {

        println("Yay?");

        self.closePopUpVC();
    }

    func showPopUpVC()
    {
        let delayTime = dispatch_time(DISPATCH_TIME_NOW,
            Int64(1.0 * Double(NSEC_PER_SEC)))

        dispatch_after(delayTime, dispatch_get_main_queue()) {

            self .presentViewController(self.popupVC, animated: true, completion: nil);

        }
    }

    func closePopUpVC()
    {
        let delayTime = dispatch_time(DISPATCH_TIME_NOW,
            Int64(1.0 * Double(NSEC_PER_SEC)))

        dispatch_after(delayTime, dispatch_get_main_queue()) {

            self.dismissViewControllerAnimated(true, completion: nil);

        }
    }
}

PopUpViewController文件

import UIKit

protocol PopUpViewControllerDelegate
{
    func popUpViewControllerDidPressOK(popUpVC: PopUpViewController);
}

class PopUpViewController: UIViewController {

    var delegate: PopUpViewControllerDelegate!;

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view!.backgroundColor = UIColor.redColor();

        // Do any additional setup after loading the view.

        self.delegate!.popUpViewControllerDidPressOK(self);
    }

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

请注意,在我的ViewController viewDidLoad()方法中,我有一行初始化popUp视图控制器,然后将其委托设置为ViewController本身:

self.popupVC = PopUpViewController();
self.popupVC.delegate = self; // you're missing this line I believe ?

我没有使用Interface Builder或Storyboard,但可能会在Storyboard中选择你的VC1并查看连接检查器,看看是否从&#34;委托&#34;到你的ViewController文件所有者的事情。

最后,您应该会在1秒后看到一个红色的屏幕弹出,然后是&#34; Yay?&#34;登录到你的Xcode控制台,最后popupVC解散。