ячейки быстрого просмотра таблицы не позволяют мне использовать indexPath.row - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь заполнить данные в ячейках внутри табличного представления. Я создал переменную selectedPlanData, которая инициализируется для объекта с данными внутри него. Объект имеет такие свойства, как «имя» и «местоположение события». Проблема возникает, когда внутри cellForRowAt. Это не позволяет мне добавить [indexPath.row] к ячейке, которую я создаю, что, в свою очередь, не заполняет ячейки правильно.

Например - я удалил indexPath.row из первого вызова cell.nameLbl.text - и, в свою очередь, все метки имен в табличном представлении были одинаковыми. вот кусок кода

 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

класс ChosenPlan {

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

}

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

расширяю мой комментарий

  1. var chosenPlanData = ChosenPlan()

chosenPlanData является объектом ChosenPlan

  1. Теперь в cellForRow вы пишете chosenPlanData.nameOfEvent[indexPath.row], но nameOfEvent - это строка в соответствии с вашим ChosenPlan, который вы упомянули в вопросе.

Для получения дополнительной информации,

chosenPlanData.nameOfEvent[indexPath.row] эта строка представляет вас, используя n-й (indexPath.row) объект nameOfEvent, который является объектом chosenPlanData

Надеюсь, теперь все прояснится.

Решение

  1. var chosenPlanData = [ChosenPlan]() <- создать массив </p>

  2. В cellForRow chosenPlanData[indexPath.row].nameOfEvent это означает, что вы используете nameOfEvent из nth объект chosenPlanData.

0 голосов
/ 11 мая 2018

Ваша переменная 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
0 голосов
/ 11 мая 2018

Тип обработки очень важен в Swift. Попробуйте это.

cell.nameLbl.text = String(chosenPlanData.nameOfEvent[indexPath.row])
let index = chosenPlanData.eventStartsAt.index(chosenPlanData.eventStartsAt.startIndex, offsetBy: 3)
cell.dateAndTimeLbl.text = String(chosenPlanData.eventStartsAt[index])
0 голосов
/ 11 мая 2018

если

var chosenPlanData = [ChosenPlan]()

Попробуйте это: -

cell.nameLbl.text = "\(chosenPlanData[indexPath.row].nameOfEvent)"

или

cell.nameLbl.text = "\(chosenPlanData[indexPath.row].nameOfEvent ?? "")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...