首页 > 解决方案 > 快速表格视图单元格不允许我使用 indexPath.row

问题描述

我正在尝试将数据填充到表格视图内的单元格中。我创建了一个 selectedPlanData var,它被初始化为一个对象,其中包含数据。该对象具有诸如“名称”和“事件位置”之类的属性。在“cellForRowAt”内部时会出现问题。它不允许我将 [indexPath.row] 添加到我正在创建的单元格中,这反过来又不会正确填充单元格。

例如 - 我从第一个 cell.nameLbl.text 调用中删除了 indexPath.row - 反过来,表格视图中的每个名称标签都是相同的。这是一段代码

 var chosenPlanData = ChosenPlan()   

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        guard let cell = tableView.dequeueReusableCell(withIdentifier: "individualPlansCell") as? PlanitsHomeViewCell else { return UITableViewCell() }


          cell.nameLbl.text = chosenPlanData.nameOfEvent[indexPath.row] // error Cannot assign value of type 'Character' to type 'String?'

        cell.dateAndTimeLbl.text = chosenPlanData.eventStartsAt[indexPath.row] as? String // error 'subscript' is unavailable: cannot subscript String with an Int, see the documentation comment for discussion

      cell.nameLbl.text = chosenPlanData.nameOfEvent // This works - but every single cell has the same nameLbl though


        return cell

    }


   // Here is the call back where i initialize the value for chosenPlanData

        let EventbriteTVC = segue.destination as! EventbriteTableView

        EventbriteTVC.callbackChosePlan = { result in


            DispatchQueue.main.async {
                self.individualPlanitsTableView.reloadData()
            }

            self.chosenPlanData = result



        }

导入基础导入 UIKit

类选择计划{

var nameOfEvent : String = ""
var eventStartsAt : String = ""
var eventLocationIs : String = ""
var eventURL : String = ""
var imageForPlan : String?


convenience init( eventName: String, eventTime: String, eventLocation: String, eventImage: String){

    self.init()

    self.nameOfEvent = eventName
    self.eventStartsAt = eventTime
    self.eventLocationIs = eventLocation
    //self.eventURL = eventLink
    self.imageForPlan = eventImage

    //eventLink: String,
}

}

标签: iosswifttableview

解决方案


您的chosenPlanData变量是单个实例ChosenPlan- 您不能为单个实例下标。

它需要是一个数组ChosenPlan

var chosenPlanData =  [ChosenPlan]()

然后你可以索引到这个数组:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "individualPlansCell") as? PlanitsHomeViewCell else { return UITableViewCell() }

          cell.nameLbl.text = chosenPlanData[indexPath.row].nameOfEvent 
          cell.dateAndTimeLbl.text = chosenPlanData[indexPath.row].eventStartsAt

推荐阅读