【问题标题】:tableview using array not working - xcode 7.3使用数组的表格视图不起作用 - xcode 7.3
【发布时间】:2016-07-27 15:45:57
【问题描述】:

我正在为我的学校设计一个应用程序,并且我正在尝试使用视图控制器中的 tableview 创建一个简单的目录。我开始尝试制作对象,但后来切换到更简单的数组,仍然没有任何运气。我不知道这是代码问题还是故事板问题。这是视图控制器的代码:

import UIKit

class DirectoryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var backButton2: UIButton!

    @IBOutlet weak var directoryTableView: UITableView!

    // @IBOutlet weak var nameLabel: NSLayoutConstraint!

    // let searchController = UISearchController(searchResultsController: nil)

    // var directoryObjects: NSMutableArray! = NSMutableArray()

    var names = ["Teacher 1", "Teacher 2", "Teacher 3"]

    override func viewDidLoad() {
        super.viewDidLoad()

        /*  
        self.directoryObjects.addObject("Teacher 1")
        self.directoryObjects.addObject("Teacher 2")
        self.directoryObjects.addObject("Teacher 3")

        self.directoryTableView.reloadData()
        */
    }

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


    // Mark - tableview

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return 3
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let directoryCell = self.directoryTableView.dequeueReusableCellWithIdentifier("directoryCell", forIndexPath: indexPath) as! DirectoryTableViewCell

        // directoryCell.directoryLabel.text = self.directoryObjects.objectAtIndex(indexPath.row) as? String

        directoryCell.directoryLabel.text = names[indexPath.row]

        return directoryCell
    }


    @IBAction func backButton2Tapped(sender: AnyObject) {
        self.dismissViewControllerAnimated(true, completion: nil)
    }

}

这是 DirectoryTableViewCell 的代码:

import UIKit

class DirectoryTableViewCell: UITableViewCell {

    @IBOutlet weak var directoryLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
/*
    func directoryTableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    }
    */
}

【问题讨论】:

  • 设置代表。
  • 是在代码中还是在故事板中?
  • 要么,这取决于你。我将添加说明作为答案
  • 或者在情节提要中,您可以从tableView 拖动到您的DirectoryViewController(视图顶部带有白色方块的黄色圆圈或文档大纲中)并选择dataSourcedelegate。甚至在您选择了tableView 后,从页面右侧连接检查器(实用程序面板)中的插座标题下的dataSourcedelegate 选项中拖动到视图控制器。
  • 这里已经回答了。 stackoverflow.com/a/25545185/3947151

标签: ios swift uitableview


【解决方案1】:

您必须设置代表。最简单的方法是在代码中。

viewDidLoad 中添加:

directoryTableView.delegate = self
directoryTableView.dataSource = self

这将允许调用那些tableView 函数。

我还建议更改:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return 3
}

到:

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

【讨论】:

  • 现在它显示错误 EXC_BAD_INSTRUCTION 到行 directoryCell.directoryLabel.text = names[indexPath.row]
  • 好吧,我对你一无所知DirectoryTableViewCell,但它应该可以正常工作。
  • 嗯,在您的cellForRowAtIndexPath 函数中,定义您的单元格时,请尝试在第一行将self.directoryTableView 更改为tableView
  • 您是否还创建了具有指定标识符的原型单元?
  • 是的,在故事板中我创建了一个原型单元。它有一个链接到 DirectoryTableViewCell 的标签,并且单元格标识符是 directoryCell。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多