ios - self.tableView.delegate=auto Swift
uitableview delegates (3)
Si tengo un UIViewController y conecto un tableView a él en storyboards, conecto el outlet de tableview, y luego conecto el origen de datos y delegue los métodos a través del inspector de conexiones (cntrl + drag to vc orange circle icon), ¿aún necesito agregar self.tableView.delegate = self al controlador de vista real? Por supuesto, en el vc real estoy implementando los protocolos de datos / delegados tableView.
También supongo que cualquiera que sea la respuesta, ¿lo mismo ocurriría si un controlador de vista de colección se conectara a través del guión gráfico de la misma manera?
¿Cuáles son los pros y los contras de agregarlo?
class FooController:UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
{
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
{
}
¿Todavía necesito agregar self.tableView.delegate = self al controlador de vista real?
No. Estás haciendo esto al hacer la conexión en el guión gráfico. Son exactamente lo mismo: una asignación a la propiedad del delegate
, expresada de dos maneras diferentes (una en el código, una "gráficamente" en el Interface Builder). Solo necesitas hacer uno de ellos.
Pero si su controlador de vista fuera un controlador de vista de tabla (subclase UITableViewController), entonces no haría ninguna de las dos cosas, porque el controlador de vista de tabla ya es el origen de datos y el delegado de la vista de tabla. Lo mismo es cierto para un controlador de vista de colección (subclase UICollectionViewController); ya es la fuente de datos y delegado de la vista de colección.
Estoy de acuerdo con las respuestas de Matt y Quang pero a veces necesitamos reutilizar la misma tabla y su delegado y fuente de datos en otra clase de ViewController en ese momento la conexión con la fuente de datos y delegado podría no ser trabajo, lo que significa que los métodos de sus delegados podrían no ser llamados.
Ejemplo -
Tengo un ViewController (clase A) con una vista de tabla. Necesito reutilizar esta vista completa del controler a otra clase (Clase B)
A.view.addSubview (B.view)
Entonces, en este caso, debes escribir códigos a continuación
Class A:UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.datasource = self
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
{
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
}
Normalmente establezco delegate
y dataSource
programmatically en el método viewDidLoad
View Controller. Porque a veces me perdí para ponerlos en punta o creé mi vista de tabla codificando.
Como la respuesta de Matt, son lo mismo. Puedes elegir una forma de hacerte feliz. Feliz codificación, hermano /.