2017-01-16 2 views
-2

Ich habe zwei ControllerUIAlertView Delegatmethode Aufruf nicht in Child-View-Controller

VC A ->Parent und VC B ->Child

Alert-Ansicht Delegatmethode d.h

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){} 

in VC A deklariert wird.

Wenn ich von VC B Delegatmethode Alarm angezeigt wird nicht aufgerufen, in Alarmtaste angeklickt.

+1

Fügen Sie Ihrer Frage den 'AlertView'-Code hinzu. –

+0

Fügen Sie den gesamten Code hinzu, wie stellen Sie die Delegate-Methode ein und rufen sie auf? – iphonic

+0

func showAlert() { var createAccountErrorAlert: UIAlertView UIAlertView =() = createAccountErrorAlert.delegate Selbst createAccountErrorAlert.tag = sender.tag createAccountErrorAlert.accessibilityIdentifier = "ReportAbuse" createAccountErrorAlert.title = "Bestätigen" createAccountErrorAlert.message = "Testing Alert" createAccountErrorAlert.addButtonWithTitle ("Cancel") createAccountErrorAlert.addButtonWithTitle ("Ok") createAccountErrorAlert.show() } –

Antwort

0
protocol alertViewDelegate:class { 
    func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) 
} 

Benachrichtigung erstellen Ansicht Delegatobjekt in übergeordneten Klasse VC A

weak var delegate:alertViewDelegate() ?= nil 

Implementieren Sie die Delegierten in VC B und Stellen Sie den Delegatobjekt in VC B

let alertview = alertView() 
alertview.delegate = self 
0

Sie setzen AlertView Selbst delegieren, bedeutet Selbst Child, Veränderung Delegierter VC A.

alertView.delegate = self.parent?.parent 
0

diesen Schritt folgen Schritt:

  1. ein Protokoll in Ihrem VC-B as:

    protocol AlertViewProtocol:class { 
        func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) 
    } 
    
  2. ein var in Ihrer VC-B-Klasse hinzufügen, wie:

    var delegate: AlertViewProtocol? 
    
  3. Verwenden Sie die de legate in irgendeiner Klassenmethode von VC-B, um die Daten an das empfangende Verfahren zu senden (d. h. jede Methode von VC-A), die jede Methode ist, die das Protokoll anwendet. Folgen Sie diesem Muster den Delegaten zu verwenden:

    delegate?.alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) 
    // Above statement is like a method calling (on delegate var), use your parameters accordingly 
    
  4. das Protokoll in Ihrer recieving Klasse adoptieren (hier, VC-A):

    class ViewControllerA: UIViewController, AlertViewProtocol { 
    ... 
    ... 
    } 
    
  5. Implementieren Sie die delegierte Methode in VC-A:

    func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) { 
        // Do your stuff 
        // when you click on the designated button in your VC-B, this method will be invoked 
    } 
    
  6. Legen Sie den Delegaten in VC-A fest, in dem Sie das VC-B-Objekt instanziieren. In meinem Fall ist dies wie:

Hier vcb?.delegate = self sehr wichtig ist. Wenn Sie vergessen, die Delegate-Eigenschaft des Objekts mit self festzulegen, funktioniert der Delegierungsprozess nicht.

@IBAction func showVCB(sender: AnyObject) { 
     let vcb: ViewControllerB? = self.storyboard?.instantiateViewControllerWithIdentifier("viewcontrollerB") as? ViewControllerB 
     vcb?.delegate = self 
     self.presentViewController(vcb!, animated: true, completion: nil) 
    } 

Hope, das hilft Ihnen für das Verständnis des Prozesses, wie die Delegierten arbeiten.

Verwandte Themen