2016-01-20 3 views
0

Как мне перейти на другой контроллер просмотра, когда появится окно предупреждения? в идеале, когда я нажимаю кнопку «ОК», я хочу, чтобы она программно изменилась на другой контроллер.Как переключиться на другой ViewController с помощью segue через AlertView?

Следующая функция, что мне нужно реализовать:

func shouldPerformSegueWithIdentifier(_ identifier: String, 
            sender sender: AnyObject?) -> Bool 

Вот мой достижимости класс:

import Foundation 
import SystemConfiguration 

public class ReachabilityNotification { 

    class func isConnectedToNetwork() -> Bool { 

     var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) 
     zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
     zeroAddress.sin_family = sa_family_t(AF_INET) 

     let defaultRouteReachability = withUnsafePointer(&zeroAddress) { 
      SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0)) 
     } 

     var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0) 
     if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false { 
      return false 
     } 

     let isReachable = flags == .Reachable 
     let needsConnection = flags == .ConnectionRequired 

     return isReachable && !needsConnection 

    } 
} 

Вот мой ViewController:

import UIKit 
import Foundation 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if Reachability.isConnectedToNetwork() == true { 
      print("Internet connection OK") 
     } else { 
      print("Internet connection FAILED") 
      let alert = UIAlertView(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", delegate: nil, cancelButtonTitle: "OK") 
      alert.show() 

     } 

    } 
} 

ответ

3

Просто вызовите performSegueWithIdentifier(identifier: String, sender: AnyObject?) где вы хотите перейти к новому контроллеру представления. Убедитесь, что вы используете ту же строку identifier, что и segue в своем раскадровке.

Дайте следующее попробовать:

if ReachabilityNotification.isConnectedToNetwork() == true { 
    print("Internet connection OK") 
} else { 
    print("Internet connection FAILED") 

    var connectionAlert = UIAlertController(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", preferredStyle: UIAlertControllerStyle.Alert) 

    connectionAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in 
     performSegueWithIdentifier("SegueIdentifier", sender: self) 
     })) 

    presentViewController(connectionAlert, animated: true, completion: nil) 
} 

EDIT:

Использование viewDidLoad() слишком рано в процессе, чтобы представить UIAlertController. Попробуйте перевести свое предупреждение в viewDidlAppear.

import UIKit 
import Foundation 

class ViewController: UIViewController { 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     if Reachability.isConnectedToNetwork() == true { 
      print("Internet connection OK") 
     } else { 
      print("Internet connection FAILED") 

      let connectionAlert = UIAlertController(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", preferredStyle: UIAlertControllerStyle.Alert) 

      connectionAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { [unowned self] (action: UIAlertAction!) in 
       self.performSegueWithIdentifier("NoConnection", sender: self) 
      })) 

      presentViewController(connectionAlert, animated: true, completion: nil) 
     } 
    } 
} 
+0

Контроллер предупреждения больше не появляется, когда у них нет подключения к Интернету, пока он не появился. Мой предыдущий код был установлен с помощью «AlertView». –

+0

Можете ли вы обновить свой исходный вопрос всем классом, где вы пытаетесь показать предупреждение? –

+0

Кроме того, UIAlertView устарел в iOS8. Лучше перейти на UIAlertController, если вы можете отказаться от поддержки iOS7. –

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