如果我有一个UIViewController,我在故事板中连接一个tableView,连接tableview插座,然后通过连接检查器连接数据源和委托方法(cntrl拖动到vc橙色圆圈图标),我还需要添加自我.tableView.delegate = self和self.tableView.datasource = self到实际的视图控制器?当然在实际的vc中我正在实现tableView数据/委托协议.
此外,我假设答案是什么,同样的方式将集合视图控制器通过故事板连接相同的方式?
添加它的优点和缺点是什么?
class FooController: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 { ... } }
解决方法
do I still need to add self.tableView.delegate = self to the actual view controller?
不.您是通过在故事板中建立连接来实现此目的的.它们完全相同:对委托属性的赋值,以两种不同的方式表示(一种在代码中,一种在“接口生成器”中以“图形方式”).你只需要做其中一个.
但是如果您的视图控制器是一个表视图控制器(UITableViewController子类),那么您也不会这样做,因为表视图控制器已经是表视图的数据源和委托.对于集合视图控制器(UICollectionViewController子类)也是如此;它已经是集合视图的数据源和委托.