Настройка ViewController для представления .xib - PullRequest
0 голосов
/ 20 апреля 2019

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

В настоящее время я пытаюсь реализовать простое приложение для iOS, но мне трудно понять, как именно я должен настроитьпользовательские UIViews и ViewControllers для этих UIViews.

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

  • Я создал файл .xib, само представление.Я добавил некоторые элементы (здесь это только текстовое поле, для простоты).
  • Я создал класс касания какао «CustomView», который наследуется от UIView, и настроил мой вид на этот класс (внутри классаЯ просто настроил элементы и все такое).

created the view and the corresponding

view is now of type

Теперь янужен ViewController, который контролирует класс всякий раз, когда он отображается (например, реагирует на изменение textField).Я не могу управлять всем из моего основного ViewController, потому что он станет слишком большим (например, 3 scrollViews * 5 подпредставлений, которыми нужно управлять).Мне нужно решение, которое использует ViewControllers для каждого подпредставления (в том случае, если у них тоже будут подпредставления).

Как мне это сделать?

Нужно ли добавить какой-нибудь childViewController?

Я действительно в растерянности, большинство постов в блогах и примеры SO просто не работают и / или устарели, и я не уверен, правильно ли я понял весь шаблон View - ViewController.

1 Ответ

0 голосов
/ 20 апреля 2019

Допустим, у вас есть два контроллера представления, MainViewController и TableViewController. Основное представление TableVC должно быть подвидом основного представления MainVC. Кроме того, вы хотите передать обратно MainVC, какая ячейка была выбрана в TableVC.

Решение состоит в том, чтобы (a) сделать TableVC дочерним для MainVC и (b) сделать MainVC делегатом для TableVC.

TableViewController:

protocol TableVCDelegate {
    func cellSelected(sender: TableViewController)
}

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    // please note that you can do delegation differently,
    // this way results in crashes if delegate is nil!

    var delegate:TableVCDelegate! = nil
    var someValue = ""

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        // set someValue to contents in the selected cell or it's data source

        someValue = "Hello World!"
        delegate.cellSelected(sender: self)

    }
}

MainViewController:

class MainViewController: UIViewController, TableVCDelegate {

    let tableVC = TableViewController()

    override func viewDidLoad() {

        // make tableVC be a child of this VC

        addChild(tableVC)
        tableVC.didMove(toParent: self)
        tableVC.delegate = self

        // position tableVC.view

        tableVC.view.translatesAutoresizingMaskIntoConstraints = false

    }

    func cellSelected(sender: TableViewController) {
        print(sender.someValue)  // this should send "Hello World!" to the console
    }
}

Это явно непроверенный код, но он основан на коде продукта. Это оболочка, которая поможет вам начать работу.

...