在视图控制器中使用表视图并进行连接

时间:2014-12-03 18:41:56

标签: objective-c delegates tableview datasource viewcontroller

我是xcode和Objective-C的新手。这是我的问题:

  • 我有一个视图控制器,带有按钮和指向其他视图控制器的链接。
  • 在这个视图控制器上,我添加了一个表格视图,其中单元格将像表格
  • 一样使用
  • 单元格将包含文本字段和标签

当尝试设置它并构建它时,它给我一个错误,说我需要以某种方式将我的表视图连接到视图控制器。

我知道它与数据源和表视图委托有关,但我不知道如何将表视图连接到数据源和视图控制器的委托。

有人可以告诉我怎么做,或者将我链接到一个易于遵循的指南吗?

由于

1 个答案:

答案 0 :(得分:1)

最简单的方法是创建一个新的Swift或Objective-C类并使用它扩展UITableViewController。这将为您创建一个关于如何编写UITableView DataSource和Delegate的完美示例代码,可以将其复制。

之后,在viewdidload中将UITableViews委托和数据源属性设置为self,并实现UITableViewDataSource,UITableViewDelegate。

修改

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var myTable: UITableView!
    var myDataArray: NSArray!

    override func viewDidLoad() {
        super.viewDidLoad()
        myDataArray = NSArray(objects: "Peter", "Paul", "Marry")
        myTable.dataSource = self
        myTable.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    //MARK: TableView DataSource
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("Cell") as? UITableViewCell

        if (cell == nil) {
            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
        }

        cell?.textLabel.text = myDataArray.objectAtIndex(indexPath.row) as NSString

        return cell!
    }

    //MARK: TableView Delegate
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }
}

我快速为您提供了一些Swift示例代码,您可以在其中查看如何将表视图与您的类的DataSource和Delegate连接。