2017-07-28 14 views
0

ここに私がしようとしていることがあります。CollectionViewCellから別のView ControllerをプッシュするためにNavigationControllerを呼び出す

class UserProfileHeader: UICollectionViewCell { 

    lazy var button: UIButton = { 
     let button = UIButton(type: .system) 
     //... 
     button.addTarget(self, action: #selector(handleButtonTapped), for: touchUpInside) 
     return button 
    }() 

    func handleButtonTapped() { 
     print("action working now") 
     // How to push another vc here? 
    } 

    // ... 
} 

ここでは、collectionViewCellで別のViewControllerをプッシュ(表示)するためにnavigationControllerを呼び出す必要があります。どうすればそこにアクセスできますか?私は努力していませんでした。それはMVCパターンのためですか?セルは他の人と話すことができませんか?それともそれを作る方法はありますか?デリゲート/プロトコルを使用したいのですか?私はそれらのことについてあまり知らない。

答えて

0

そこにあなたがプッシュすることができますビューコントローラを1つのカスタムデリゲートを作成し、そののViewControllerに設定し、その後、あなたはそのデリゲートメソッドと呼ばれるcollectionviewセル]ボタンをタップしたときに、それはあなたのViewController内で起動します

なぜこの
func handleButtonTapped() { 
//Your delegate method showuld be invoked here 
delegate?.buttontappFromCollectionViewCell() 

} 

//Now inside your view controller 
func buttontappFromCollectionViewCell() { 
let vc = UIStoryboard(name: "storyboardName", bundle: nil).instantiateViewController(withIdentifier: "yourViewControllerIdentifier") 
let navigationController = UINavigationController(rootViewController: vc) 
navigationController.pushViewController(vc, animated: true) 
} 
+0

わかりません投票された。 – NRitH

+0

私はUICollectionViewCellからstorybaordを直接開くように求めていたかもしれません。しかし、可能であれば、ViewControllerの中で常に最良の方法が開かれます –

+0

私は同意します。ストーリーボードでアクションを取り入れることはさらに簡単です。 – NRitH

関連する問題