快速IBAction按钮有两个类

时间:2015-09-13 22:11:35

标签: ios swift button uiviewcontroller unrecognized-selector

我想知道是否可以使用在另一个类中创建的按钮来触发操作。

我解释说:

我有两个类,视图控制器和用于创建视图的类。

在视图控制器中,我调用位于第二个类中的方法来创建自定义视图。然后我将自定义视图添加到主视图(请参阅下面的代码)。 自定义视图显示一个按钮,我不知道如何使用我的按钮,因为在运行我的应用程序时找不到作为目标创建的方法。

代码viewController:

import UIKit

class FirstViewController: UIViewController {

    var popupViewBeforeOrderCoupon:UIView?

    override func viewDidLoad() {
        super.viewDidLoad()

        popupViewBeforeOrderCoupon = CustomView.createPopupViewWithList()
        self.view.addSubview(popupViewBeforeOrderCoupon!)        
    }

    func cancelView(sender: UIButton!) {
        var alertView = UIAlertView();
        alertView.addButtonWithTitle("OK");
        alertView.title = "Alert";
        alertView.message = "Button Pressed!!!";
        alertView.show();
    }

}

和第二个类CustomView:

import Foundation
import UIKit

class CustomView {

    init () {

    }

    static func createPopupViewWithList() -> UIView? {
        var dynamicView = UIView(frame: CGRectMake(100, 200, 200, 100))
        dynamicView.backgroundColor = UIColor.grayColor()
        dynamicView.alpha = 1
        dynamicView.layer.cornerRadius = 5
        dynamicView.layer.borderWidth = 2

        let button = UIButton();
        button.setTitle("Add", forState: .Normal)
        button.setTitleColor(UIColor.blueColor(), forState: .Normal)
        button.frame = CGRectMake(10, 10, 100, 50)
        dynamicView.addSubview(button)

        button.addTarget(self, action: "cancelView:", forControlEvents: .TouchUpInside)

        return dynamicView
    }

    func cancelView(sender: UIButton!) {
        var alertView = UIAlertView();
        alertView.addButtonWithTitle("OK");
        alertView.title = "Alert";
        alertView.message = "Button Pressed!!!";
        alertView.show();
    }
}

我希望我在customView创建的按钮在我按下时调用方法cancelView,但我无法做到。

这是我得到的错误:

  

NSForwarding:警告:类'Myproject.CustomView'的对象0x523c8没有实现methodSignatureForSelector: - 提前出现问题   无法识别的选择器+ [Myproject.CustomView cancelView:]

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以修改createPopupViewWithList以接受UIViewController的1个参数,然后将按钮的目标设置为它。

代码:

static func createPopupViewWithList(controller: UIViewController) -> UIView? {
    var dynamicView = UIView(frame: CGRectMake(100, 200, 200, 100))
    dynamicView.backgroundColor = UIColor.grayColor()
    dynamicView.alpha = 1
    dynamicView.layer.cornerRadius = 5
    dynamicView.layer.borderWidth = 2

    let button = UIButton();
    button.setTitle("Add", forState: .Normal)
    button.setTitleColor(UIColor.blueColor(), forState: .Normal)
    button.frame = CGRectMake(10, 10, 100, 50)
    dynamicView.addSubview(button)

    // set your controller here
    button.addTarget(controller, action: "cancelView:", forControlEvents: .TouchUpInside)

    return dynamicView
}

然后从FirstViewController调用你的函数:

popupViewBeforeOrderCoupon = CustomView.createPopupViewWithList(self)