Swift UIActionSheet在iPad上崩溃了吗?

时间:2014-09-25 11:37:26

标签: ipad swift uiactionsheet

我目前遇到了完全的挫折,因为我找不到任何错误,但我的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上崩溃了。

任何人都知道可能出错了什么?

2 个答案:

答案 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不会崩溃