首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS Swift Storyboard 跳轉黑屏問題:正確實例化 ViewController

     編輯:程式設計綜合問答

使用 Storyboard 拖拽控件添加跳轉事件時出現黑屏,而純代碼創建同樣 ViewController 則正常。本文解釋原因並給出正確做法。

問題代碼(黑屏)

@IBAction func changePassword(sender: UIButton) {
  let vc = ChangePasswordViewController() // 錯誤:直接 init,未加載 Storyboard 場景
  self.present(vc, animated: true, completion: nil)
}

原因分析

ChangePasswordViewController() 僅調用初始化器,不會加載 Storyboard 中設計的視圖層級、約束、Outlet 連接等,導致視圖為空(黑屏)。

正確做法:通過 Storyboard 實例化

@IBAction func changePassword(sender: UIButton) {
  let storyboard = UIStoryboard(name: "Main", bundle: nil)
  // "ChangePasswordVC" 是 Storyboard 中該控制器的 Storyboard ID
  if let vc = storyboard.instantiateViewController(withIdentifier: "ChangePasswordVC") as? ChangePasswordViewController {
    self.present(vc, animated: true, completion: nil)
  }
}

設置 Storyboard ID 步驟

  1. 打開 Main.storyboard
  2. 選中目標 ViewController
  3. 在 Identity Inspector(右側第 3 個圖標)中設置 Storyboard ID = ChangePasswordVC
  4. 勾選 Use Storyboard ID

補充:Segue 方式跳轉

若按鈕在 Storyboard 中,可直接拖拽 Present Modally Segue 到目標 VC,無需寫代碼;傳值時覆寫 prepare(for:sender:)。

總結

Storyboard 設計的控制器必須通過 instantiateViewController(withIdentifier:) 創建,直接 init() 只會得到空殼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved