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

Я пытаюсь сделать так, чтобы когда пользователь нажимал на ячейку табличного представления в моем табличном представлении, он переводил их на новый контроллер представления. В частности, когда пользователь нажимает на имя пользователя, он должен перейти к профилю этого пользователя. имя пользователя — это ячейка табличного представления, а профиль — новый контроллер представления. Я думал, что способ сделать это - использовать ".presentViewController(vc, анимированный: true, завершение: nil), однако, когда я это делаю, он говорит: "myCell не имеет члена с именем .presentViewController"Ниже приведен скриншот проблемы

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


person Ronald Jones    schedule 09.06.2015    source источник


Ответы (4)


presentViewController:animated:completion — это метод экземпляра UIViewController, а не UIView или его подкласса. Вы можете попробовать это:

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

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

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

person Bannings    schedule 09.06.2015

Ответ Баннинга работает, однако синтаксис устарел. Из Swift 4:

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

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)
person Ahmed Safadi    schedule 05.07.2017

Если вы создали отдельный класс для 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)
}
person Ashay    schedule 19.06.2018