stanford cs193p
play

Stanford CS193p Developing Applications for iOS Winter 2017 CS193p - PowerPoint PPT Presentation

Stanford CS193p Developing Applications for iOS Winter 2017 CS193p Winter 2017 Today Miscellaneous Topics Alerts and Action Sheets Notifications Application Lifecycle Persistence CS193p Winter 2017 Alerts and Action Sheets Two kinds of


  1. Stanford CS193p Developing Applications for iOS Winter 2017 CS193p Winter 2017

  2. Today Miscellaneous Topics Alerts and Action Sheets Notifications Application Lifecycle Persistence CS193p Winter 2017

  3. Alerts and Action Sheets Two kinds of “pop up and ask the user something” mechanisms Alerts Action Sheets Alerts Pop up in the middle of the screen. Usually ask questions with only two answers (e.g. OK/Cancel, Yes/No, etc.). Can be disruptive to your user-interface, so use carefully. Often used for “asynchronous” problems (“connection reset” or “network fetch failed”). Can have a text field to get a quick answer (e.g. password) Action Sheets Usually slides in from the bottom of the screen on iPhone/iPod Touch, and in a popover on iPad. Can be displayed from bar button item or from any rectangular area in a view. Generally asks questions that have more than two answers. Think of action sheets as presenting “branching decisions” to the user (i.e. what next?). CS193p Winter 2017

  4. Action Sheet & Alert Action Sheet Alert CS193p Winter 2017

  5. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) CS193p Winter 2017

  6. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) CS193p Winter 2017

  7. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(...) CS193p Winter 2017

  8. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(UIAlertAction(...)) CS193p Winter 2017

  9. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(UIAlertAction( title: String, style: UIAlertActionStyle, handler: (action: UIAlertAction) -> Void )) CS193p Winter 2017

  10. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(UIAlertAction( title: “Orbit Saturn”, style: UIAlertActionStyle.default) { (action: UIAlertAction) -> Void in // go into orbit around saturn } ) CS193p Winter 2017

  11. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(UIAlertAction( title: “Orbit Saturn”, style: UIAlertActionStyle.default) { (action: UIAlertAction) -> Void in // go into orbit around saturn } ) alert.addAction(UIAlertAction( title: “Explore Titan”, style: .default) { (action: UIAlertAction) -> Void in if !self.loggedIn { self.login() } // if loggedIn go to titan } ) CS193p Winter 2017

  12. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(/* orbit saturn action */) alert.addAction(/* explore titan action */) alert.addAction(UIAlertAction( title: “Closeup of Sun”, style: .destructive) { (action: UIAlertAction) -> Void in if !loggedIn { self.login() } // if loggedIn destroy Cassini by going to Sun } ) alert.addAction(UIAlertAction( title: “Cancel”, style: .cancel) { (action: UIAlertAction) -> Void in // do nothing } ) CS193p Winter 2017

  13. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(/* orbit saturn action */) alert.addAction(/* explore titan action */) alert.addAction(/* destroy with closeup of sun action */) alert.addAction(/* do nothing cancel action */) present(alert, animated: true, completion: nil) CS193p Winter 2017

  14. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(/* orbit saturn action */) alert.addAction(/* explore titan action */) alert.addAction(/* destroy with closeup of sun action */) alert.addAction(/* do nothing cancel action */) present(alert, animated: true, completion: nil) CS193p Winter 2017

  15. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(/* orbit saturn action */) alert.addAction(/* explore titan action */) alert.addAction(/* destroy with closeup of sun action */) alert.addAction(/* do nothing cancel action */) alert.modalPresentationStyle = .popover present(alert, animated: true, completion: nil) CS193p Winter 2017

  16. var alert = UIAlertController( title: “Redeploy Cassini”, message: “Issue commands to Cassini’s guidance system.”, preferredStyle: .actionSheet ) alert.addAction(/* orbit saturn action */) alert.addAction(/* explore titan action */) alert.addAction(/* destroy with closeup of sun action */) alert.addAction(/* do nothing cancel action */) alert.modalPresentationStyle = .Popover let ppc = alert.popoverPresentationController ppc?.barButtonItem = redeployBarButtonItem present(alert, animated: true, completion: nil) CS193p Winter 2017

  17. var alert = UIAlertController( title: “Login Required”, message: “Please enter your Cassini guidance system...”, preferredStyle: .alert ) CS193p Winter 2017

  18. var alert = UIAlertController( title: “Login Required”, message: “Please enter your Cassini guidance system...”, preferredStyle: .alert ) alert.addAction(UIAlertAction( title: “Cancel”, style: .cancel) { (action: UIAlertAction) -> Void in // do nothing } ) CS193p Winter 2017

  19. var alert = UIAlertController( title: “Login Required”, message: “Please enter your Cassini guidance system...”, preferredStyle: .alert ) alert.addAction(/* cancel button action */) alert.addAction(UIAlertAction( title: “Login”, style: .default) { (action: UIAlertAction) -> Void in // get password and log in } ) CS193p Winter 2017

  20. var alert = UIAlertController( title: “Login Required”, message: “Please enter your Cassini guidance system...”, preferredStyle: .alert ) alert.addAction(/* cancel button action */) alert.addAction(UIAlertAction( title: “Login”, style: .default) { (action: UIAlertAction) -> Void in // get password and log in if let tf = self.alert.textFields?.first { self.loginWithPassword(tf.text) } } ) alert.addTextField(configurationHandler: { textField in textField.placeholder = “Guidance System Password” }) CS193p Winter 2017

  21. var alert = UIAlertController( title: “Login Required”, message: “Please enter your Cassini guidance system...”, preferredStyle: .alert ) alert.addAction(/* cancel button action */) alert.addAction(UIAlertAction( title: “Login”, style: .default) { (action: UIAlertAction) -> Void in // get password and log in if let tf = self.alert.textFields?.first { self.loginWithPassword(tf.text) } } ) alert.addTextField(configurationHandler: { textField in textField.placeholder = “Guidance System Password” }) present(alert, animated: true, completion: nil) CS193p Winter 2017

  22. CS193p Winter 2017

  23. Demo Yet more FaceIt! Add an Alert to FaceIt CS193p Winter 2017

  24. MVC Controller Notification & KVO Model View Radio Station Communication CS193p Winter 2017

  25. Notification Notifications The “radio station” from the MVC slides. For Model (or global) to Controller communication. NotificationCenter Get the default “notification center” via NotificationCenter.default Then send it the following message if you want to “listen to a radio station” … / / a cookie to later “stop listening” with var observer: NSObjectProtocol observer = NotificationCenter.default.addObserver( / / the name of the radio station forName: NSNotification.Name, / / the broadcaster (or nil for “anyone”) object: Any?, / / the queue on which to dispatch the closure below queue: OperationQueue? / / closure executed when broadcasts occur ) { (notification: Notification) -> Void in let info: Any? = notification.userInfo / / info is usually a dictionary of notification-specific information } CS193p Winter 2017

  26. Notification What is NSNotification.Name ? Look this up in the documentation to see what iOS system radio stations you can listen to. There are a lot. You will see them as static var s on NSNotification.Name . You can make your own radio station name with NSNotification.Name(String) . More on broadcasting on your own station in a couple of slides … CS193p Winter 2017

Recommend


More recommend