Swift UIActionSheet在iPad上崩溃



我目前遇到了完全的挫折,因为我找不到任何错误,但我的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上运行良好,"showShop"在iPhone上运行良好但在iPad 上运行不佳

"showShop"Segue转发到我的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上崩溃了。

有人知道可能出了什么问题吗?

如果您的项目同时支持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)
}

并且您的类需要符合UIActionSheet类的UIActionSheetDelegate

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"
            }
        }
    }
}

也尝试过这个

@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 上崩溃

最新更新