web-dev-qa-db-ja.com

プログラムでUITableViewCellのボタンを使用してViewControllerを表示する(Swift)

ユーザーがテーブルビューのテーブルビューセルをクリックすると、新しいビューコントローラーに移動するようにしようとしています。より具体的には、ユーザーが個人のユーザー名をクリックすると、そのユーザーのプロファイルに移動する必要があります。ユーザー名はテーブルビューセルであり、プロファイルは新しいビューコントローラーです。これを行う方法は「.presentViewController(vc、animated:true、completion:nil)」を使用することだと思いましたが、これを行うと「myCellには.presentViewControllerという名前のメンバーがありません」と表示されます。Below is a screenshot of the issue

誰かが私がこの問題を解決するのを手伝ってくれるなら、それは大いにありがたいです

12
Ronald Jones

presentViewController:animated:completionは、UIViewControllerまたはのサブクラスではなくUIViewのインスタンスメソッドです。あなたはこれを試すことができます:

self.window?.rootViewController.presentViewController(specificViewController, animated: true, completion: nil)

ただし、UIViewControllerpresentViewController:animated:completion:メソッドを使用することをお勧めします。コールバックメカニズムは、UIViewControllercellの間で実現できます。

そのように: Iテーブルビューセル内のボタンクリックを取得

19
Bannings

Banningの答えは機能しますが、構文は古いものです。からSwift 4

self.window?.rootViewController?.present(vc, animated: true, completion: nil)
7
The Doctor

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)
3
Ahmed Safadi

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)
}
0
Ashay