Представление контроллера просмотра с помощью кнопки в 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)
}