Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 单击一个按钮时如何发送事件_Ios_Iphone_Swift_Uibutton_Swift3 - Fatal编程技术网

Ios 单击一个按钮时如何发送事件

Ios 单击一个按钮时如何发送事件,ios,iphone,swift,uibutton,swift3,Ios,Iphone,Swift,Uibutton,Swift3,我已经创建了UIAlertView,它有两个按钮:正按钮和负按钮。 AlertView也是viewcontroller 我正在从主viewController打开AlertVC 这是我的名片 class AlertVC: UIViewController { var transitioner : CAVTransitioner @IBOutlet weak var alertPositiveBtn: IFOButton! @IBOutlet weak var ale

我已经创建了UIAlertView,它有两个按钮:正按钮和负按钮。 AlertView也是viewcontroller

我正在从主viewController打开AlertVC

这是我的名片

class AlertVC: UIViewController {

    var transitioner : CAVTransitioner


    @IBOutlet weak var alertPositiveBtn: IFOButton!
    @IBOutlet weak var alertNegativeBtn: IFOButton!

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        self.transitioner = CAVTransitioner()
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        self.modalPresentationStyle = .custom
        self.transitioningDelegate = self.transitioner
    }

    convenience init() {
        self.init(nibName:nil, bundle:nil)
    }

    required init?(coder: NSCoder) {
        fatalError("NSCoding not supported")
    }



    @IBAction func postiveBtnPressed(_ sender: IFOButton) {

    }


    @IBAction func negativeBtnPressed(_ sender: IFOButton) {

    }


    @IBAction func closeBtnPressed(_ sender: UIButton) {
        self.presentingViewController?.dismiss(animated: true, completion: nil)
    }
}
我想要的:我想要MainViewController以某种方式检测按下的按钮是负数还是正数

有人能告诉我怎么做吗

更新:使用代理模式后

以下是我在MainViewController上所做的操作

class MainViewController: UIViewController, AlertVCDelegate
这是我的函数

func positiveBtnPressed(onAlertVC: IFOAlertVC) {
    print("Pos")
    }
    func negativeBtnPressed(onAlertVC: IFOAlertVC) {
    print("Neg")}

它仍然没有被调用。

您必须按住CTRL键并将按钮从应用程序情节提要拖动到自己的方法

IFOButton应该是UIButton派生的类(继承)

即使你只需要一种方法就可以做到这一点

@IBAction internal func handleButtonTap(_ sendder: UIButton) -> Void
{
    if sender === alertPositiveBtn
    {
         // Do something positive here
    }
    else
    {
        // Do something negative here
    }
}

您必须按住CTRL键并将按钮从应用程序情节提要拖动到自己的方法

IFOButton应该是UIButton派生的类(继承)

即使你只需要一种方法就可以做到这一点

@IBAction internal func handleButtonTap(_ sendder: UIButton) -> Void
{
    if sender === alertPositiveBtn
    {
         // Do something positive here
    }
    else
    {
        // Do something negative here
    }
}

这是一个教科书上的例子

将协议添加到AlertVC:

protocol AlertVCDelegate : class {
    func positiveBtnPressed(onAlertVC: AlertVC)
    func negativeBtnPressed(onAlertVC: AlertVC)
}
然后在AlertVC类中创建一个
weak
属性,并将按下的按钮传递给它:

class AlertVC : UIViewController {
    weak var delegate: AlertVCDelegate?
    ...
    @IBAction func postiveBtnPressed(_ sender: IFOButton) {
        delegate?.positiveBtnPressed(onAlertVC: self)
    }


    @IBAction func negativeBtnPressed(_ sender: IFOButton) {
        delegate?.negativeBtnPressed(onAlertVC: self)
    }
}
MainViewController
中执行
AlertVCDelegate
协议,并在从
MainViewController
显示
AlertVC
时设置
delegate


如果您从一个序列显示警报vc,请使用
prepare(for:sender:)
方法将
MainViewController
设置为代理。

这是一个教科书示例

将协议添加到AlertVC:

protocol AlertVCDelegate : class {
    func positiveBtnPressed(onAlertVC: AlertVC)
    func negativeBtnPressed(onAlertVC: AlertVC)
}
然后在AlertVC类中创建一个
weak
属性,并将按下的按钮传递给它:

class AlertVC : UIViewController {
    weak var delegate: AlertVCDelegate?
    ...
    @IBAction func postiveBtnPressed(_ sender: IFOButton) {
        delegate?.positiveBtnPressed(onAlertVC: self)
    }


    @IBAction func negativeBtnPressed(_ sender: IFOButton) {
        delegate?.negativeBtnPressed(onAlertVC: self)
    }
}
MainViewController
中执行
AlertVCDelegate
协议,并在从
MainViewController
显示
AlertVC
时设置
delegate


如果您从一个序列显示警报vc,请使用
prepare(for:sender:)
MainViewController
设置为代理的方法。

请提供标签值alertPositiveBtn和alertNegativeBtn,您可以将此标签值传递给控制器。您可以使用
delegate/protocol
进行此操作。请提供标签值alertPositiveBtn和alertNegativeBtn,您可以传递此标签值控制员您可以使用
委托/协议
。@David Ganster谢谢您的回答。我完全按照你说的做了,但是MainViewController上的函数没有被调用。有什么我可以错过的吗?查看我更新的问题plzDid您是否确保在演示alertVC时设置
代理
?向警报控制器的
positive/negativeBtnPressed()
方法添加一个断点,以验证它们是否被调用,以及
delegate
是否为空。@DavidGanster我这样做了。检查我更新的问题,您将看到。我在调用它时在AlertVC上设置了断点,但当对话框关闭时,在MainViewController上根本没有调用此函数。@pmb您没有显示您在任何地方设置了委托,只是实现了协议。你能在
MainViewController
中设置
myAlertVC.delegate=self
的地方发布代码吗?@DavidGanster我没有设置,我忘了。现在它工作得很好。非常感谢你。我认为这是最好的答案。@David Ganster谢谢你的回答。我完全按照你说的做了,但是MainViewController上的函数没有被调用。有什么我可以错过的吗?查看我更新的问题plzDid您是否确保在演示alertVC时设置
代理
?向警报控制器的
positive/negativeBtnPressed()
方法添加一个断点,以验证它们是否被调用,以及
delegate
是否为空。@DavidGanster我这样做了。检查我更新的问题,您将看到。我在调用它时在AlertVC上设置了断点,但当对话框关闭时,在MainViewController上根本没有调用此函数。@pmb您没有显示您在任何地方设置了委托,只是实现了协议。你能在
MainViewController
中设置
myAlertVC.delegate=self
的地方发布代码吗?@DavidGanster我没有设置,我忘了。现在它工作得很好。非常感谢你。我认为这是最好的答案。