2017-08-29 5 views
1

セルをクリックすると、このビューコントローラをプッシュします。私はuserProfileControllerをプッシュするUIViewからビューコントローラをプッシュするには

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

    let userProfileController = UserProfileController(collectionViewLayout: UICollectionViewFlowLayout()) 

} 

は、ここに私のコードです。

注:これは、あなたがUIViewのから任意のコントローラをプッシュすることはできませんUIViewないビューコントローラ

+0

を試してみてください。 https://stackoverflow.com/a/24590678/6642629 – koropok

+0

ビューからプッシュすることはできません。 – Pushpendra

+0

ビューを所有しているビューコントローラにコールバック/デリゲートを作成し、その場所から次のビューコントローラをプッシュすることを検討してください。 – user3581248

答えて

3

です。これを行うには、NavigationControllerを使用する必要があります。

私はいくつかのUIViewControllerの中にあなたのUIViewがあると仮定しているので、多くのオプションの1つは、ビューコントローラにプッシュを行うように指示するデリゲートを作成することです。ナビゲーションコントローラのスタックとビューコントローラ内のビューコントローラがビューを保持している場合

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

ビューとプッシュからのViewControllerを得ることができ、この

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

これは機能しました! Simple –

+0

それはうまくいくが、壊れやすい。あなたのビューにowningNavigationControllerプロパティを与え、ビューがロードされたらそれを設定する方が良いでしょう。 (所有するビューコントローラにサポートコードを追加する必要があります)。 –

関連する問題