2017-08-29 144 views
1

當我點擊一個單元我想推這個視圖控制器。如何從UIView推視圖控制器

這裏是我的代碼:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let user = filteredUsers[indexPath.item] 
    print(user.username) 

    let userProfileController = UserProfileController(collectionViewLayout: UICollectionViewFlowLayout()) 

} 

我想推userProfileController

注:這是一個UIView不是一個視圖控制器

+0

你可以從該視圖和推視圖控制器。 https://stackoverflow.com/a/24590678/6642629 – koropok

+0

你不能從視圖推動。 – Pushpendra

+0

考慮爲擁有視圖的視圖控制器創建回調/委託,並從該位置推入下一個視圖控制器。 – user3581248

回答

3

不能從UIView的推動任何控制器。要做到這一點,你必須使用NavigationController。

我假設你有你的UIView裏面的一些UIViewController,所以許多選項之一將創建一個委託,它會告訴你的視圖控制器做推。

protocol MyViewDelegate { 
    func didTapButton() 
} 

class MyView: UIView { 

    weak var delegate: MyViewDelegate? 

    func buttonTapAction() { 
     delegate?.didTapButton() 
    } 
} 

class ViewController: UIViewController, MyViewDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     myView.delegate = self 
    } 

    func didTapButton() { 
     self.navigationController?.pushViewController(someVc, animated: true) 
    } 

} 
0

如果在導航控制器堆棧和視圖控制器視圖控制器所擁有的視圖,那麼你可以按照 滑塊機構從VC

func pushViewController(completion:() ->()) { 
} 

分配完成塊。

self.navigationController?.pushViewController(userProfileController, animated: true) 
1

試試這個

(superview?.next? as? UIViewController)?.navigationController?.pushViewController("your viewcontroller object", animated: false) 
+0

這工作!簡單 –

+0

雖然有效,但它很脆弱。最好爲您的視圖提供owningNavigationController屬性,並在視圖加載時進行設置。 (您需要在擁有的視圖控制器中添加支持代碼。) –

相關問題