it-swarm.com.ru

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

Я пытаюсь сделать так, чтобы, когда пользователь нажимает на ячейку табличного представления в моем табличном представлении, он переносит их в новый контроллер представления. Точнее говоря, когда пользователь нажимает на имя пользователя, он должен перевести их в профиль этого пользователя. имя пользователя - это ячейка табличного представления, а профиль - новый контроллер представления. Я думал, что способ сделать это заключается в использовании ".presentViewController (vc, animated: true, extension: 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)

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

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

17
Bannings

Ответ Баннинга работает, однако синтаксис старый. С Swift 4 :

self.window?.rootViewController?.present(vc, animated: true, completion: nil)
6
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)
2
Safad Funy

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