2017-02-08 2 views
0

Ich möchte eine Benachrichtigung mit Bestätigung anzeigen, wenn der Benutzer auf die Zurück-Schaltfläche klickt. So versuche ich Aktionen hinzuzufügen.Aktion zur Navigationsleiste Zurück-Taste

self.navigationItem.hidesBackButton = true 
let newBackButton = UIBarButtonItem(title: "<", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.save(sender:))) 
self.navigationItem.leftBarButtonItem = newBackButton 

arbeitet diese in Ordnung, aber ich möchte es die Standard-Zurück-Schaltfläche Bild und nicht der eigenen Titel. Wie geht das ?

Ich habe versucht, auch folgenden Code:

self.navigationItem.backBarButtonItem?.action = #selector(ViewController.save(sender:)) 

... aber die Aktion wird auch nicht durchgeführt.

+0

Ich denke, Sie können nur das richtige Bild von zurück Pfeil festlegen, hier ist die [Vermögenswerte] (http://StackOverflow.com/A/30110190/4929876) laden Sie es und fügen Sie es auf die benutzerdefinierte Schaltfläche zurück. –

+0

self.navigationItem.hidesBackButton = true; Wenn es wahr ist? Das bedeutet, dass Sie den Standard-Zurück-Button und ihr Icon auch nicht bekommen können. – Mannopson

+0

@Mannopson Ja, ich hatte es auf wahr gesetzt. – Nitesh

Antwort

0

Ich weiß nicht, was Sie versuchen zu erreichen, aber ist es nicht eine mögliche Lösung zu tun, was Sie wollen, wann immer vieWillDisappear: aufgerufen wurde? Dies ist vielleicht ein passender Einstiegspunkt, ohne mit dem in den anderen Antworten vorgeschlagenen Backbar-Button herumzuspielen.

Bessere Eine andere Möglichkeit wäre, die UINavigationControllerDelegate zu implementieren, stellen Sie Ihren Controller als delegate und dann Alarm in navigationController(_:willShow:animated:) zu implementieren.

Werfen Sie einen Blick here als Referenz.

+0

Ich muss eine Warnung anzeigen, wenn der Benutzer die Zurück-Taste drückt. Der Alarm wird eine Schaltfläche mit "Ja" und "Nein" haben. Ich probierte es auf viewWillDisappear, aber meine Warnung wurde nicht darauf dargestellt – Nitesh

+0

Hinzugefügt eine andere Option, die in Ihre Situation passen sollte. –

+0

Es wird aufgerufen, wenn die Ansicht angezeigt wird und jedes Mal auf Push usw. Ich will es nur auf der Rückseite. – Nitesh

0

Sie benutzerdefinierte zurück-Taste Navigationsleiste hinzufügen müssen, und Aktion hinzufügen, um es

 let backButton = UIBarButtonItem (image: UIImage(named: "ico-nav-prev")!, style: .plain, target: self, action: #selector(GoToBack)) 
     self.navigationItem.leftBarButtonItem = backButton 
     self.navigationItem.hidesBackButton = true 

    func GoToBack(){ 

     self.navigationController!.popViewController(animated: true) 

     } 
0

Ich denke, das answer die Arbeit machen sollte.

Sie erstellen Ihre Schaltfläche im Grunde mit dem Standardstil und registrieren einen Selektor.

Und Sie könnten this für eine backbutton statt Leftbutton versuchen:

Objective-C

UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] init]; 
[desVC.navigationItem setBackBarButtonItem:backBtn]; 

Swift

let backBtn = UIBarButtonItem() 
self.navigationItem.backBarButtonItem = backBtn 
0

Diese helfen könnte. Dies überschreibt die Back-Aktion nicht, aber Sie können zusätzliche Aufgaben ausführen.

Objective c

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    if(self.isMovingFromParentViewController) 
    { 
     //On click of back or swipe back 
    } 
    if(self.isBeingDismissed) 
    { 
     //Dismissed 
    } 
    NSLog(@"%d",self.isBeingDismissed); 
    NSLog(@"%d",self.isMovingFromParentViewController); 
} 

Swift

override func viewWillDisappear(_ animated: Bool) 
{ 
    super.viewWillDisappear(animated); 
    if self.isMovingFromParentViewController 
    { 
     //On click of back or swipe back 
    } 
    if self.isBeingDismissed 
    { 
     //Dismissed 
    } 
} 
+0

aber Alarm wird nicht angezeigt, wenn ich es auf diese Weise mache. – Nitesh

+0

Der Alarm wird auf diesem View-Controller nicht angezeigt, da er verschwinden wird. Versuchen Sie, auf der vorherigen Ansicht Controller anzuzeigen, der angezeigt wird. –

+1

Hinzugefügt "Swift" -Code. –

0

Rufen Sie diese Codezeile innerhalb Ihrer ParentViewController ‚s viewDidLoad Methode nicht die ChildViewController

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) 

die folgende Codezeile entfernen von Ihrer ChildViewController

self.navigationItem.hidesBackButton = true 

Und Sie werden OK! Wenn Sie eine Aktion für diesen Übergang erstellen müssen, meine ich immer, wenn der Benutzer auf die Zurück-Schaltfläche von ChildViewController tippt.Einfach diese Methode aufrufen, innerhalb Ihrer ChildViewController

override func didMove(toParentViewController parent: UIViewController?) { 
    super.didMove(toParentViewController: parent) 

    if parent == nil { 

    } else { 

    } 
} 

Edited:

ChildViewController

override func didMove(toParentViewController parent: UIViewController?) { 
    super.didMove(toParentViewController: parent) 

    if parent == nil { 
     NotificationCenter.default.post(name: NSNotification.Name.init("Post"), object: nil) 
    } else { 

    } 

} 

parent

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    NotificationCenter.default.addObserver(self, selector: #selector(self.handler(notification:)), name: NSNotification.Name.init(rawValue: "Post"), object: nil) 

} 

func handler(notification: Notification) { 

    let alertController = UIAlertController(title: "Hello", message: nil, preferredStyle: .alert) 
    alertController.addAction(UIAlertAction(title: "Dismiss", style: .default, handler: nil)) 
    self.present(alertController, animated: true, completion: nil) 

} 
Die 0

ist funktioniert, aber mit einem Problem wie folgt:

Warnung: Versuch darzustellen, während eine Präsentation im Gang ist!

Daher werde ich nicht empfohlen. Viel Glück

+0

Aber durch diese Warnmeldung wird nicht angezeigt. – Nitesh

+0

Ich weiß, wie es gemacht wird – Mannopson

+0

Aber diese Warnung wird ein kleines Problem sein – Mannopson

Verwandte Themen