ios - uiscrollview嵌套uicollectionview - uitableview嵌套




self.tableView.delegate=self Swift (2)

我仍然需要将self.tableView.delegate = self添加到实际的视图控制器?

不,你是通过在故事板上建立连接来做到这一点的。 它们是完全一样的:对delegate属性的赋值,用两种不同的方式表示(一种用代码表示,另一种用图形方式在界面生成器中)。 你只需要做其中一个。

但是,如果你的视图控制器是一个表视图控制器 (UITableViewController子类),那么你不会做,因为表视图控制器已经是表视图的数据源和委托。 集合视图控制器 (UICollectionViewController子类)也是如此; 它已经是集合视图的数据源和委托。

如果我有一个UIViewController,并在故事板中连接一个tableView,连接tableview出口,然后通过连接检查器(cntrl +拖动到vc橙色圆圈图标)连接数据源和委托方法,我仍然需要添加self.tableView.delegate = self到实际的视图控制器? 当然,在实际的VC我实现tableView数据/委托协议。

此外,我假设答案是相同的会去收集视图控制器通过故事板以相同的方式连接?

添加它的优点和缺点是什么?

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 {
{
    }

我同意Matt和Quang的答案,但有时我们需要在其他ViewController类中重复使用相同的TableView及其委托和数据源,那么与数据源和委托的出口连接可能不会工作,这意味着您的委托方法可能不会被调用。

示例 -

我有一个ViewController(A类)与tableview.I需要重用这个控制器整个视图到另一个类(B类)

A.view.addSubview(B.view)

所以在这种情况下,你必须写下面的代码

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 {
  }




uicollectionview