我目前遇到了完全的挫折,因为我找不到任何错误,但我的ActionSheet在iPad上崩溃但在iPhone上运行良好这是行动的代码
if (view.annotation.title as String!) == "San Francisco" {
currentLat = 37.615223
currentLong = -122.389977
url = "www.google.de"
let action:UIActionSheet = UIActionSheet(title: "Change Map Type", delegate: self, cancelButtonTitle: "Back", destructiveButtonTitle: nil, otherButtonTitles: "Product Page", "Video")
action.showInView(self.view)
action.tag = 0
VideoID = "XXXXXX"
}
所以应该处理的行动是
if actionSheet.tag == 0{
if buttonIndex == 1{ performSegueWithIdentifier("showShop", sender: self) }
if buttonIndex == 2{ UIApplication.sharedApplication().openURL(NSURL(string: "http://www.youtube.com/watch?v=\(youtubeVideoID)")) }
//if buttonIndex == 2{ performSegueWithIdentifier("showYoutube", sender: self) }
}
Youtube可以在iPhone和iPad上运行良好,#34; showShop"在iPhone上运行良好,但在iPad上运行不正常
" showShop"向前看我的ViewControllerShopView看起来像
import UIKit
class ViewControllerShopView: UIViewController {
/* ################################################## IBOutlets ################################################## */
@IBOutlet weak var activity3: UIActivityIndicatorView!
@IBOutlet weak var webView: UIWebView!
/* ################################################## viewDidLoad ################################################## */
override func viewDidLoad() {
super.viewDidLoad()
loadurl()
}
/* ################################################## didReceiveMemoryWarning ################################################## */
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
println("memory warning")
}
/* ################################################## viewWillAppear ################################################## */
override func viewWillAppear(animated: Bool) {
loadurl()
}
/* ################################################## loadurl func ################################################## */
func loadurl(){
var loadingurl = "google.com"
var homeurl = "google1.com"
loadingurl = url
let webviewURL = NSURL(string: loadingurl)
let request = NSURLRequest(URL: webviewURL)
webView.loadRequest(request)
}
/* ################################################## HomeButton ################################################## */
@IBAction func Reload(sender: AnyObject) {
var loadingurl = "google.com"
var homeurl = "google1.com"
loadingurl = url
let webviewURL = NSURL(string: loadingurl)
let request = NSURLRequest(URL: webviewURL)
webView.loadRequest(request)
}
/* ################################################## Activity Indicator ################################################## */
func webViewDidStartLoad(_ : UIWebView){activity3.startAnimating()}
func webViewDidFinishLoad(_ : UIWebView){activity3.stopAnimating()}
}
但是Segue从来没有在iPad上完成,它只是在Segue上崩溃了。
任何人都知道可能出错了什么?
答案 0 :(得分:6)
如果项目支持 iOS7和iOS8,则需要在运行时检查系统版本;您可以将此代码段插入任何方法中:
let systemVersion: NSInteger = (UIDevice.currentDevice().systemVersion as NSString).integerValue
if systemVersion < 8 {
// iOS7:
let action:UIActionSheet = UIActionSheet(title: "Change Map Type", delegate: self, cancelButtonTitle: "Back", destructiveButtonTitle: nil, otherButtonTitles: "Product Page", "Video")
action.tag = 0
action.showInView(self.view)
} else {
// iOS8:
let alertController: UIAlertController = UIAlertController(title: "Change Map Type", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let cancelAction: UIAlertAction = UIAlertAction(title: "Back", style: UIAlertActionStyle.Cancel, handler: nil)
let button1action: UIAlertAction = UIAlertAction(title: "Product Page", style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) -> () in
// doing something for "product page"
})
let button2action: UIAlertAction = UIAlertAction(title: "Video", style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) -> () in
// doing something for "video"
})
alertController.addAction(cancelAction)
alertController.addAction(button1action)
alertController.addAction(button2action)
// for iPAD support:
alertController.popoverPresentationController?.sourceView = self.view
alertController.popoverPresentationController?.sourceRect = CGRectMake(self.view.bounds.width / 2.0, self.view.bounds.height / 2.0, 1.0, 1.0) // this is the center of the screen currently but it can be any point in the view
self.presentViewController(alertController, animated: true, completion: nil)
}
您的班级需要符合UIActionSheetDelegate
班级的UIActionSheet
:
extension ViewController : UIActionSheetDelegate {
func actionSheet(actionSheet: UIActionSheet, didDismissWithButtonIndex buttonIndex: Int) {
if actionSheet.tag == 0 {
if buttonIndex == 1 {
// doing something for "product page"
} else if (buttonIndex == 2) {
// doing something for "video"
}
}
}
}
答案 1 :(得分:-1)
也试过这个
@IBAction func BTfindme(sender: AnyObject) {
let actionSheetController: UIAlertController = UIAlertController(title: "Action Sheet", message: "Test", preferredStyle: .ActionSheet)
let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in
}
actionSheetController.addAction(cancelAction)
let ActionOne: UIAlertAction = UIAlertAction(title: "Action one", style: .Default) { action -> Void in
}
actionSheetController.addAction(ActionOne)
let ActionTwo: UIAlertAction = UIAlertAction(title: "Action two", style: .Default) { action -> Void in
}
ActionTwo.addAction(choosePictureAction)
self.presentViewController(actionSheetController, animated: true, completion: nil)
}
这也会导致ipad崩溃,但iphone不会崩溃