Ios 单击一个按钮时如何发送事件
我已经创建了UIAlertView,它有两个按钮:正按钮和负按钮。 AlertView也是viewcontroller 我正在从主viewController打开AlertVC 这是我的名片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
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我没有设置,我忘了。现在它工作得很好。非常感谢你。我认为这是最好的答案。