Как подключить источник данных и делегировать с помощью кода-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 ответа:
Просто для справки вот шаги, необходимые для выполнения подключения программно.
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 жалуется на это.