2014-09-25 2 views
1

я м в настоящее время работает в полный фрустраций, как я не могу найти какую-либо ошибку, но мои ActionSheet падает на IPad, но хорошо работает на iPhone здесь код действияSwift UIActionSheet падает на iPad?

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.

Кто-нибудь знает, что может быть неправильным?

+0

на iOS8 + вы должны использовать 'UIActionController' вместо этого, 'UIActionSheet' и' UIAlertView' устарели, подробнее об этом здесь: https://developer.apple.com/library/IOs/documentation/UIKit/Reference/UIActionSheet_Class/index.html, однако вы не упомянули, какие версии iOS ... – holex

+0

@holex как мой лист действий должен выглядеть как actioncontroller? –

+0

они выглядят одинаково, потому что 'UIAlertController' является« объединенной »(или« объединенной », если хотите) версией« UIActionSheet »и« UIAlertView »в одном классе, поэтому конечный пользователь не будет определять разница, но под капотом (в вашем коде) вам нужно справиться с такой устаревшей ситуацией, если ваш проект поддерживает как iOS7, так и iO8. – holex

ответ

-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

5

вам необходимо проверить версию системы во время выполнения, если ваш проект поддерживает как 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" 
      } 
     } 
    } 

} 
+0

Получение с *** Завершение приложения из-за неотображенного исключения «NSGenericException», причина: «В вашем приложении представлен UIAlertController () стиля UIAlertControllerStyleActionSheet. –

+0

modalPresentationStyle UIAlertController с этим стилем UIModalPresentationPopover. Вы должны предоставить информацию о местоположении для этого popover через popoverPresentationController контроллера контролера. Вы должны указать либо sourceView, и sourceRect, либо barButtonItem. Если эта информация неизвестна при представлении контроллера предупреждений, вы можете предоставить ее в методе UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation. ' –

+0

Я просто тестирую его на новом проекте с симулятором с Xcode6 6A313 - работает на iphone, но падает на ipad –

Смежные вопросы