Как подключить источник данных и делегировать с помощью кода-iOS Swift


Я пытаюсь лучше понять, как выходы источника данных и делегата подключаются к UITableView под капотом, когда вы выполняете соединение через пользовательский интерфейс в Xcode, перетаскивая его на значок viewController.

Я нашел этот Поток, но я думаю, что я что-то упускаю, потому что я не могу заставить его работать.

Вот код, который у меня сейчас есть, который прекрасно работает, подключая розетки через XCode (перетаскиванием).

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var hobbies:[String] = ["Computers", "Photography", "Cars", "Reading", "Learning New Things"]


    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return hobbies.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell

        cell.textLabel?.text =  hobbies[indexPath.row]

        return cell
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

I попытался удалить выходные соединения, сделанные XCode, создал выход для tableView (myTable) и добавил следующий код в методе viewDidLoad, но он не работает, нет ошибки, он просто не загружает данные.

        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.

           myTable.delegate = self
           myTable.dataSource = self
        }

Может ли кто-нибудь описать шаги, необходимые для выполнения этого соединения с кодом?

2 4

2 ответа:

Просто для справки вот шаги, необходимые для выполнения подключения программно.

1.- Создать выход для tableView

 @IBOutlet weak var myTable: UITableView!

2.- Назначьте делегат и источник данных в методе viewDidLoad.

myTable.delegate = self
myTable.dataSource = self

3.- Сделано

Есть несколько способов сделать это.

1. Самый простой из них-это перетаскивание:

Перетаскивание и падение

  • в вашем основном.раскадровка выберите TableView;
  • Нажмите кнопку управления;
  • щелкните мышью и перетащите ее из TableView на значок ViewController;
  • Затем выберите источник данных и делегировать, как показано на рисунке выше.

2. Другой путь-мимо кодировка:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
    }
}

PS: Не забудьте подключить выход tableView к вашему коду, перетащив его в класс ViewController.

PPS: Он также попросит вас реализовать следующие методы в вашем классе, чтобы ваш tableView работал правильно:

  • numberOfRowsInSection
  • cellForRowAtIndexPath

Для тех, у кого их еще нет, вы увидите, что Xcode жалуется на это.