Um einen Alarm auf einem View-Controller anzuzeigen, kann der folgende Code verwendet werden.
let a = UIAlertController(title: "Your title", message: "Your message", preferredStyle: .alert)
a.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
// Pressed "OK"
}))
self.present(a, animated: true, completion: { finished in
// Alert shown
})
Es gibt jedoch eine Grenze dafür, wie viele Informationen in eine Warnung passen. Wenn Sie etwas länger haben, könnte das Erstellen eines neuen View-Controllers und das modale Präsentieren auch funktionieren. Dadurch können Sie anpassen, wie Informationen angezeigt werden sollen (z. B. mit einer Bildlauf-/Seitenansicht). Sie können Ihren View-Controller auch so anpassen, dass er wie eine Warnung aussieht, sodass der Zweck klarer ist. Um einen View Controller modal darzustellen, können Sie die Methode present
verwenden.
self.present(otherViewController, animated: true, completion: nil)
Eine Methode, ich habe in dem Pfad verwendet eine Warnung ähnliche Controller modale Ansicht zu machen sind ein kleineren View-Controller über die aktuelle Präsentation und das Ändern es ist modal Präsentationsstil, so dass Sie den Basis-View-Controller sehen durch.
let otherVC = self.storyboard?.instantiateViewController(withIdentifier: "OtherViewController") as! OtherViewController
otherVC.modalPresentationStyle = .overCurrentContext
otherVC.view.center = vc.view.center
otherVC.delegate = self //Create a delegate so that you can control actions such as "OK" buttons
self.view.isUserInteractionEnabled = false //Stop the user interacting with the view controller behind the alert
self.present(otherVC, animated: true, completion: nil)
Edit: Sie können die Delegierten Steueraktionen machen, wie die Warnung mit Aktionen zu schließen. Zum Beispiel könnte dies ein Beispiel für Ihre Stellvertretung sein:
protocol AlertDelegate {
func didCancel()
func didOkay()
}
Dann könnten Sie diese implementieren etwa so:
class RootViewController: UIViewController, AlertDelegate {
func didCancel() { ... }
func didOkay() { ... }
func showAlert() {
...
otherVC.delegate = self
...
}
}
Dann in Ihrem Alert-View-Controller, Sie mit den Delegierten in Wechselwirkung treten können.
class MyAlert: UIViewController {
var delegate: AlertDelegate!
@IBAction func cancelButton(sender: UIButton) {
delegate.didCancel()
self.dismiss(animated: true, completion: nil)
}
}
Also, wenn die Löschtaste auf dem Alarm-View-Controller angeklickt wird, würden die Delegierten sagen, dass es aufgehoben und der modal-View-Controller würde entlassen werden. Dann würde der Root-View-Controller diese Aktion erhalten und könnte entsprechend damit umgehen.
Ich mag diese Idee. Wie schließe ich schließlich den overtop viewController (otherVC)? Und, mit dieser Einrichtung, kann ich Code von der ursprünglichen VC ausführen, sagen wir, nachdem der Benutzer "Ok" in anderenVC und andereVC schließt? ... Ich möchte die saveButton auf der OriginalVC, um die andereVC mit der Info zu öffnen ... der Benutzer schlägt "Ok" in anderenVC, der andereVC schließt/verschwindet, und dann möchte ich den Rest des 'saveButtonTapped' Codes von der ursprünglichen VC laufen lassen? –
@AlekPiasecki Ja, der Delegierte ist hier sehr praktisch. Siehe die Bearbeitung, die ich für weitere Informationen vorgenommen habe. – brimstone
Ich habe noch eine Frage. Sie haben '' self.view.isUserInteractionEnabled = false '' im RootViewController aufgerufen, als die Schaltfläche getroffen wurde. Offensichtlich muss ich 'self.view.isUserInteractionEnabled = true' in der anderen VC setzen, sobald eine der Schaltflächen ausgeführt wurde (" ok "oder" cancel "), aber wie verweise ich auf diesen RootViewController im Code des anderen VCs? Ich habe versucht: 'rootVC = self.storyboard? .instantiateViewController (withIdentifier:" RootViewController ") als! RootViewController "und dann, in der" ok "-Schaltfläche in der anderen VC,' rootVC.view.isUserInteractionEnabled = true', aber dies hat nicht funktioniert. –