Heute erstellen wir ein paar Action-Sheets in Swift um Webseiten in Safari, Twitter Profile in der nativen Twitter App oder E-Mail auf dem iOS-Device zu öffnen. Der Swift-Code ist unter Xcode 6.1 GM mit iOS 8.1 unter OS X Yosemite 10.10 GM getestet.
@IBAction func testButtonPressed(sender: AnyObject) {
var alert = UIAlertController(title: "Open external link?", message: "Webpage in Safari, profile in Twitter app or compose a new eMail.", preferredStyle: UIAlertControllerStyle.ActionSheet)
alert.addAction(UIAlertAction(title: "Open http://www.codedifferent.com",
style: UIAlertActionStyle.Default, handler: { (action:UIAlertAction!) -> Void in
UIApplication.sharedApplication().openURL(NSURL(string: "http://www.codedifferent.com")!)
return
}))
alert.addAction(UIAlertAction(title: "Open @codedifferent in Twitter app",
style: UIAlertActionStyle.Default, handler: { (action:UIAlertAction!) -> Void in
UIApplication.sharedApplication().openURL(NSURL(string: "twitter://user?screen_name=codedifferent")!)
return
}))
alert.addAction(UIAlertAction(title: "Create eMail",
style: UIAlertActionStyle.Default, handler: { (action:UIAlertAction!) -> Void in
UIApplication.sharedApplication().openURL(NSURL(string: "mailto:your@emailadress.com")!)
return
}))
alert.addAction(UIAlertAction(title: "Cancel",
style: UIAlertActionStyle.Cancel, handler: nil))
if let popoverController = alert.popoverPresentationController {
popoverController.sourceView = sender as UIView
popoverController.sourceRect = sender.bounds
}
self.presentViewController(alert, animated: true, completion: nil)
}
Am einfachsten lässt sich eine neue E-Mail durch übergeben der gewünschten E-Mail-Adresse als „mailto:…@…“ erstellen. Doch Vorsicht: Damit schickt man den Nutzer in das Programm Mail und übergibt die Ziel-E-Mail-Adresse. Wenn der Nutzer die E-Mail geschrieben oder den Vorgang abgebrochen hat, bleibt er in der externen App Mail. Wenn Du willst, dass der Nutzer in Deiner App auch nach dem E-Mail-Schreiben bleibt, oder wenn Du mehr Parameter der E-Mail vorausfüllen willst, hilft nur MFMailComposeViewController. Damit kannst Du dann auch den Betreff oder den E-Mail-Text vorgeben … aber das ist Stoff für ein anderes Posting ;-)