2017-09-04 111 views
0

我有一個自定義UIView子類(AccountInfoModal),它通過將其添加爲子視圖而顯示在ViewController的頂部。 AccountInfoModal有一個按鈕,這應該導致另一個ViewController被呈現。 初始化其他ViewController不是問題。呈現它。從自定義UIView(xib文件)呈現視圖控制器

由於AccountInfoModal不是ViewController我不能使用.present(viewControllerToPresent...)

如何從UIView中呈現另一個ViewController。我想不明白。

編輯: 我已經實現了這個建議:

let underlyingVC = UIApplication.shared.keyWindow?.rootViewController 
underlyingVC?.performSegue(withIdentifier: "SEGSignInViewController", sender: nil) 

但它會導致崩潰的最後一行(包無法加載NIB:...)。

回答

0

嘗試此:

在AccountInfoModal文件

創建以上AccountInfoModal類的協議:

protocol AccountInfoModalDelegate : class { 
func willPresentingViewController(){ 
} 

AccountInfoModal類的內部限定delegate變量:

weak var delegate? 

按鈕動作調用內部:

delegate?.willPresentingViewController() 

在視圖控制器文件里加入以下內容:

extension ViewController : AccountInfoModalDelegate { 
    func willPresentingViewController(){ 
    let vc = AnotherVC() 
    self.present(vc, animated : true, completion : nil) 
    } 
} 

最後一步,在您致電提出AccountInfoModal視圖AccountInfoModal delegate = self的設置實例

0

AccountInfoModal的屬性,containingViewController。當您將AccountInfoModal視圖安裝爲子視圖時進行設置。然後用它來呈現其他視圖控制器。

0

的最簡單的方式 - 就目前認爲的UIViewController從根的UIViewController:

let vc = UIViewController() //Your UIViewController 
let rootVC = UIApplication.shared.keyWindow?.rootViewController //UIViewController from where you will present your UIViewController 
rootVC?.present(vc, animated: true, completion: nil) //Present method 
相關問題