2015-08-11 17 views
13

Tôi mới sử dụng Swift và tôi muốn biết cách loại bỏ trình điều khiển chế độ xem hiện tại và chuyển sang chế độ xem khác.Làm cách nào để loại bỏ Chế độ xem hiện tại và chuyển đến Chế độ xem khác trong Swift

Bảng phân cảnh của tôi giống như sau: MainMenuView -> GameViewController -> GameOverView. Tôi muốn loại bỏ các GameViewController để đi đến GameOverView, không phải cho MainMenuView.

tôi sử dụng đoạn mã sau vào MainMenuView tôi:

@IBAction func StartButton(sender: UIButton) { 
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
    let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameViewController") as! GameViewController 
    self.presentViewController(nextViewController, animated:true, completion:nil) 
    restGame() 
} 

Trong GameViewController, tôi sử dụng mã này, nhưng nó không bỏ qua những GameViewController.

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("GameOverView") as! GameOverView 
self.presentViewController(nextViewController, animated:true, completion:nil) 

Đây là Mã GameOverView của tôi:

class GameOverView: UIViewController{ 
    // save the presenting ViewController 
    var presentingViewController :UIViewController! = self.presentViewController 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    @IBAction func ReplayButton(sender: UIButton) { 
     restGame() 
     didPressClose() 
    } 
    @IBAction func ReturnMainMenu(sender: UIButton) { 
     Data.GameStarted = 1 
     self.dismissViewControllerAnimated(false) { 
      // go back to MainMenuView as the eyes of the user 
      self.presentingViewController.dismissViewControllerAnimated(false, completion: nil); 
     } 
     /* let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
     let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("MainScene") as! MainScene 
     self.presentViewController(nextViewController, animated:true, completion:nil)*/ 

    } 
    func restGame(){ 
     Data.score = 0 
     Data.GameHolder = 3 
     Data.GameStarted = 1 
     Data.PlayerLife = 3.0 
     Data.BonusHolder = 30 
     Data.BonusTimer = 0 
    } 
    func didPressClose() 
    { 
     self.self.dismissViewControllerAnimated(true, completion:nil) 
    } 
    override func shouldAutorotate() -> Bool { 
     return false 
    } 

    deinit{ 
     print("GameOverView is being deInitialized."); 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Release any cached data, images, etc that aren't in use. 
    } 

    override func prefersStatusBarHidden() -> Bool { 
     return true 
    } 


} 

Bất kỳ lời đề nghị?

Trả lời

38

Những gì bạn có thể làm là để cho các GameOverView được trình bày, sau khi tất cả khi bạn trình bày nó GameViewController dưới trong hệ thống cấp bậc, và sau đó trong bạn GameOverView chạy đoạn mã sau để đóng cả khi bạn muốn bỏ qua những GameOverView, như theo cách sau:

@IBAction func ReturnMainMenu(sender: UIButton) { 
    // save the presenting ViewController 
    var presentingViewController: UIViewController! = self.presentingViewController 

    self.dismissViewControllerAnimated(false) { 
      // go back to MainMenuView as the eyes of the user 
      presentingViewController.dismissViewControllerAnimated(false, completion: nil) 
    } 
} 

Mã trên cần được gọi khi bạn muốn loại bỏ GameOverView.

Tôi hy vọng điều này sẽ giúp bạn.

+0

nó không hoạt động nó đưa ra một thông báo lỗi "Getter cho 'presentingViewController' với Objective-C selector xung đột 'presentingViewController' với getter cho 'presentingViewController' từ 'UIViewController' lớp cha với cùng chọn Objective-C" i cập nhật bài đăng của tôi để bạn có thể xem mã của tôi cho GameOverView – Michel

+0

Trước hết, 'var presentingViewController: UIViewController! = self.presentViewController' bên ngoài một hàm không hoạt động, bạn cần khai báo nó và sau đó bên trong 'viewDidLoad' khởi tạo nó. Vấn đề của bạn là liên quan đến điều đó khi bạn khai báo 'presentingViewController' như một thuộc tính được lưu trữ,' UIViewController' tạo ra xung đột với 'presentingViewController' của riêng bạn, giải pháp: thay đổi tên. Đoạn mã trên được gọi bên trong một hàm để tránh các loại xung đột này. –

+0

Cảm ơn sự giúp đỡ của nó trở lại MainMenu nhưng GameViewController không được loại bỏ nhưng bộ nhớ không được phát hành – Michel

0

Mã bên dưới sẽ đưa bạn đến VC chính, Dưới đây là một đoạn mã đã thử và đã thử nghiệm.

self.view.window!.rootViewController?.dismiss(animated: false, completion: nil) 
Các vấn đề liên quan