Изменить вид контроллера на сенсорном столе, используя внешний класс - PullRequest
0 голосов
/ 03 июня 2018

Я разрабатываю приложение для iOS с использованием Swift, и мне было интересно узнать, как изменить контроллер представления, когда пользователь касается ячейки.Я много гуглил, но ничего не смог найти.

Мой код:

class ViewControllerMain: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    let customTableView = CustomTableView()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.customTableView.tableData = ["item 1", "item 2", "item3"]
        self.tableView.delegate = self.customTableView
        self.tableView.dataSource = self.customTableView
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

А потом:

class CustomTableView: UITableViewController {

    // I omitted a lot of overrides that are not useful for this question.

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        // Here I would like to redirect the user to another view controller, let's say "ExampleViewController".

    }

}

Есть ли способ указать в ViewControllerMain контроллер представления, который должен отображаться при прикосновении к ячейке?Если нет, как я могу перенаправить пользователя напрямую с CustomTableView?Спасибо.

1 Ответ

0 голосов
/ 03 июня 2018

Вы можете сделать контроллер CustomTableView источником данных и делегатом для его просмотра.Это означает перемещение модели для вашего табличного представления, массива: ["item 1", "item 2", "item3"], в контроллер табличного представления, CustomTableView.(Кроме того, я переименовал его; контроллер не должен называться "... View".):

class CustomTableTableViewController: UITableViewController {
let examples = ["item 1", "item 2", "item3"]

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {

        return 1
    }
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let exampleViewController = storyboard?.instantiateViewController(withIdentifier: "AstoryboardSceneID")
        navigationController?.pushViewController(exampleViewController!, animated: true)
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return examples.count
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let example = examples[indexPath.row]
        cell.textLabel?.text = example

        return cell
    }

Вам необходимо установить идентификатор в Интерфейсном Разработчике, как показано ниже:

Setting view controller identifier

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...