ユーザーがテーブルビューのテーブルビューセルをクリックすると、新しいビューコントローラーに移動するようにしようとしています。より具体的には、ユーザーが個人のユーザー名をクリックすると、そのユーザーのプロファイルに移動する必要があります。ユーザー名はテーブルビューセルであり、プロファイルは新しいビューコントローラーです。これを行う方法は「.presentViewController(vc、animated:true、completion:nil)」を使用することだと思いましたが、これを行うと「myCellには.presentViewControllerという名前のメンバーがありません」と表示されます。
誰かが私がこの問題を解決するのを手伝ってくれるなら、それは大いにありがたいです
presentViewController:animated:completion
は、UIViewController
またはのサブクラスではなくUIView
のインスタンスメソッドです。あなたはこれを試すことができます:
self.window?.rootViewController.presentViewController(specificViewController, animated: true, completion: nil)
ただし、UIViewController
のpresentViewController:animated:completion:
メソッドを使用することをお勧めします。コールバックメカニズムは、UIViewController
とcell
の間で実現できます。
そのように: Iテーブルビューセル内のボタンクリックを取得
Banningの答えは機能しますが、構文は古いものです。からSwift 4:
self.window?.rootViewController?.present(vc, animated: true, completion: nil)
Swift3
バージョン
let storyboard = UIStoryboard(name: "MainViewController", bundle: nil)
let messagesViewController = storyboard.instantiateViewController(withIdentifier: "MessagesViewController") as! MessagesViewController
self.window?.rootViewController?.present(messagesViewController, animated: true, completion: nil)
tableView
の-separateクラスを作成した場合は、次のように行うことができます。
まず、create addTargetセルが作成される場所(cellForRowAt):
cell.dropdownBtn.addTarget(self, action: #selector(self.openListPickerVC(_:)), for: .touchUpInside)
その後、openListPickerVC()にViewControllerを表示します。
@objc func openListPickerVC(_ sender: UIButton) {
let index = sender.tag
let vc: PickerViewController = UIStoryboard(name: "Main", bundle:
Bundle.main).instantiateViewController(withIdentifier:
"PickerViewController") as! PickerViewController
self.present(vc, animated: true, completion: nil)
}