一旦我开始滚动,我的带有自定义 xib 单元格的 UITableView 就会消失

Posted

技术标签:

【中文标题】一旦我开始滚动,我的带有自定义 xib 单元格的 UITableView 就会消失【英文标题】:My UITableView with custom xib cells disappear as soon as I start scrolling 【发布时间】:2018-11-22 04:00:39 【问题描述】:
import UIKit

class ToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 

    @IBOutlet weak var DateLabel: UILabel!
    @IBOutlet weak var MonthLabel: UILabel!
    @IBOutlet weak var DayLabel: UILabel!
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var newButton: UIImageView!

    static var ToDoEvents:[event] = []

    override func viewDidLoad() 
        super.viewDidLoad()
        ToDoViewController.readFromFile()
       // let nib = UINib(nibName: "CustomCell", bundle: nil)
       // tableView.register(nib, forCellReuseIdentifier: "customCell")
        //let nib = UINib.init(nibName: "customCell", bundle: nil)
       // tableView.register(nib, forCellReuseIdentifier: "customCell")

       tableView.register(UINib(nibName: String(describing: CustomCell.self), bundle: nil), forCellReuseIdentifier: "customCell")

        self.tableView.delegate = self
        self.tableView.dataSource = self

        // Do any additional setup after loading the view.
    

    public static func readFromFile()
        ToDoViewController.ToDoEvents.append(event(eventName: "Spanish Workbook", eventLength: 3601, complete: false))
        ToDoViewController.ToDoEvents.append(event(eventName: "History Test", eventLength: 37, complete: false))
        ToDoViewController.ToDoEvents.append(event(eventName: "Lit Essay", eventLength: 40, complete: true))
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return ToDoViewController.ToDoEvents.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! CustomCell
        let currentEvent = ToDoViewController.ToDoEvents[indexPath.row]
        let eventName = currentEvent.name!
        let eventLength = currentEvent.time!
        let completion = currentEvent.isComplete!
        print(eventName)
        print(eventLength)
        print(completion)

        cell.customInit(name: "\(eventName)", time: "\(eventLength)", completed: completion)
        return cell
    

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
        return 100
    


    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    
    */


这是我的整个视图控制器类,但我无法找出为什么一旦我开始向下滚动所有数据就会消失。尽管您最初可以看到数据,但无法看到数据。我无法弄清楚为什么数据会消失以及整个文件消失的原因。下面分享了自定义的 init 方法,虽然我相信这不是改变它的实际问题。

func customInit(name: String, time: String, completed: Bool)
    self.eventName.text = name
    self.lengthLabel.text = time

    if(completed) 
        completedImage.image = UIImage(named: "C")
     else 
        completedImage.image = UIImage(named: "R")
    
    //self.contentView.backgroundColor = UIColor(red: 129/255.0, green: 25/255.0, blue: 207/255.0, alpha: 1)

导入基础

课堂活动 变量名称:字符串? 变量时间:整数? var isComplete: 布尔值?

init(eventName: String, eventLength: Int) 
    self.name = eventName
    self.time = eventLength
    self.isComplete = false


init(eventName: String, eventLength: Int, complete: Bool) 
    self.name = eventName
    self.time = eventLength
    self.isComplete = complete

【问题讨论】:

你能分享你的customInit方法吗? @Malik 是的,我已经编辑了初始帖子并分享了 customInit 的代码。 请分享您的活动类别代码 @JatinKathrotiya 我已经用事件类代码更新了代码。 我在我的机器上检查了上面的代码,它对我来说工作正常。可能是其他一些不在表格视图代码中的问题 【参考方案1】:

您应该更改 numberOfRowsInSection 中的静态数字

喜欢:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return ToDoViewController.ToDoEvents.count

【讨论】:

这似乎无法解决我面临的问题,您能提出其他建议吗? 我认为这个答案是有道理的。您的代码要求 6 行,但您的数据模型只有 3 个事件。所以我希望你无法滚动,因为你的数据太少了。 当我尝试滚动时数据仍然消失,即使我将其更改为事件数量的计数。 请更新问题中的代码。如当前显示的部分中有 6 行,但数据中只有 3 行,当尝试访问最后 3 条评论中的第一篇的数据时,应用程序会崩溃 对不起,我已经更新了问题中的代码。

以上是关于一旦我开始滚动,我的带有自定义 xib 单元格的 UITableView 就会消失的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义 xib 的 TableCellView 未加载

UIViewController xib 文件包含一个带有自定义单元格的集合视图

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外

单击tableView后隐藏xib的自定义UITableViewCell

带有包含自定义单元格的 UITableView 的 UISearchBar => 空白单元格

动态调整自定义 xib 单元格的大小