2017-01-13 2 views
0

私が作成したUIAlertViewをクリックしたとき。 AlertViewもviewcontrollerです。イベントを送信する方法を一つのボタンは2つのボタン、正ボタンとマイナスのボタンを持っている

私はメインのViewControllerからAlertVCを開封しております。私はMainViewControllerは何とか正または負の押されたボタンを検出します:

はここで何をしたい私の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) 
    } 
} 

です。

は、私がこれを行う可能性がどのように誰も私を伝えることができますか?

UPDATE:ここではデリゲートパターン

@IBAction func positiveBtnPressed(_ sender: IFOButton) { 
    delegate?.positiveBtnPressed(onAlertVC: self) 
    self.presentingViewController?.dismiss(animated: true, completion: nil) 
} 

@IBAction func negativeBtnPressed(_ sender: IFOButton) { 
    delegate?.negativeBtnPressed(onAlertVC: self) 
    self.presentingViewController?.dismiss(animated: true, completion: nil) 
} 

を使用した後、私はMainViewController

class MainViewController: UIViewController, AlertVCDelegate 

にやったことであり、ここでそれがまだ

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

私の機能であります呼び出されます。 CTRL +は、独自の方法にアプリのストーリーボードからボタンをドラッグする

+0

は、タグ値alertPositiveBtnとalertNegativeBtnを記入してください、あなたはあなたがそのために 'デリゲート/ protocol'を使用することができます –

+0

コントローラ上で、このタグ値を渡すことができます。 –

答えて

2

ことを行うための一つの方法を必要とします。

あなた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) 
    } 
} 

はあなたのMainViewControllerAlertVCDelegateプロトコルを実装し、あなたはMainViewControllerからAlertVCを提示したときにdelegateを設定します。

segueからアラートvcを表示する場合は、prepare(for: sender:)メソッドを使用してMainViewControllerをデリゲートとして設定します。

+0

これは非常に良い答えです。 (投票されました) –

+0

@DuncanCはい、これは非常に良い答えです。 – pmb

+0

@David Gansterあなたの答えに感謝します。私はあなたの言うことを正確に行いましたが、MainViewControllerの関数は呼び出されませんでした。私は何かが恋しいですか?私の更新された質問plz – pmb

0

あなたが持っています。

IFOButtonは、UIButton派生クラス(継承)である必要があります。

も、あなたはこれだけdelegate patternの教科書の一例である

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