Представление контроллера просмотра с помощью кнопки в UITableViewCell программно (Swift)

Я пытаюсь сделать это, когда пользователь нажимает на ячейку таблицы в моем представлении таблицы, он переносит их на новый контроллер представления. Более конкретно, когда пользователь нажимает на имя пользователя пользователя, он должен отнести их к этому профилю пользователей. имя пользователя является ячейкой просмотра таблицы, а профиль - новым контроллером представления. Я думал, что для этого нужно использовать ".presentViewController(vc, animated: true, completion: noil), однако, когда я это делаю, он говорит:" myCell не имеет члена с именем .presentViewController "Below is a screenshot of the issue

Если кто-нибудь может помочь мне решить эту проблему, будем очень благодарны

Ответ 1

presentViewController:animated:completion - это метод экземпляра UIViewController not UIView или подкласс. Вы можете попробовать следующее:

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

Однако я предлагаю вам использовать метод presentViewController:animated:completion: из UIViewController. Механизм обратного вызова может быть достигнут между UIViewController и cell.

Так: Получить щелчок по кнопке внутри ячейки представления таблицы пользовательского интерфейса

Ответ 2

Запрет ответов работает, однако синтаксис старый. Из Swift 4:

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

Ответ 3

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)

Ответ 4

Если вы создали отдельный класс для tableView что является хорошей практикой, вы можете сделать это следующим образом:

Сначала создайте addTarget, где создается ячейка (cellForRowAt):

cell.dropdownBtn.addTarget(self, action: #selector(self.openListPickerVC(_:)), for: .touchUpInside)

После этого представьте контроллер представления в openListPickerVC():

@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)
}