как получить значение метки, помещенной в ячейку табличного представления - PullRequest
0 голосов
/ 06 августа 2020

У меня есть несколько ячеек в моем представлении таблицы, каждая из которых содержит разные значения меток, когда я нажимаю на ячейку, я хочу, чтобы это значение метки в следующем контроллере представления. как мне это получить?

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    
       let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as!
       MeetingsListTableViewCell
    
       if self.meeting.count > 0{
           let eachMeeting = self.meeting[indexPath.row]
        
        cell.meetingTimeLabel?.text = (eachMeeting["time"] as? String) ?? "No Time"
        cell.meetingDateLabel?.text = (eachMeeting["date"] as? String) ?? "No Date"
        cell.idLabel?.text = (eachMeeting["id"] as? String) ?? "NO ID"
       }
       return cell
   }

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = UIStoryboard.init(name: "Main4", bundle:Bundle.main).instantiateViewController(withIdentifier: "MeetingDetailVC") as? MeetingDetailVC

self.navigationController?.pushViewController(vc!, animated: true)
   
}

я хочу, чтобы это idLabel значение отправлялось в следующий контроллер просмотра

Ответы [ 3 ]

1 голос
/ 06 августа 2020

Всегда получать данные из массива источника данных meeting, а не из ячейки, например

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let aMeeting = self.meeting[indexPath.row]
    let identifier = aMeeting["id"] as! String
    
    guard let vc = UIStoryboard.init(name: "Main4", bundle:Bundle.main).instantiateViewController(withIdentifier: "MeetingDetailVC") as? MeetingDetailVC else { return } 
    vc.identifier = identifier
    self.navigationController?.pushViewController(vc, animated: true)
}

Код предполагает, что в MeetingDetailVC

есть идентификатор свойства

Примечания:

  • Для удобства чтения массивы следует называть во множественном числе (meetings).
  • Проверка self.meeting.count > 0 бессмысленна, cellForRowAt не выполняется вызывается, если массив источника данных пуст.
  • Настоятельно рекомендуется использовать настраиваемую структуру в качестве источника данных, а не массив словарей. Вы избавитесь от всех этих надоедливых приведений типов.
0 голосов
/ 06 августа 2020

К выделенной ячейке можно получить доступ в didSelectRowAt функции tableVeiw . Извлеките ячейку tableView и приведите int в свою пользовательскую ячейку, после преобразования вы можете напрямую получить доступ к значению lableId, добавить дополнительное свойство в MeetingDetailV C и передать ему значение.

0 голосов
/ 06 августа 2020

Опишите переменную yourID в MeetingDetailVC и измените didSelect fun c на:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let id  = self.meeting[indexPath.row]["id"] as! Strimg) ?? "NO ID"

let vc = UIStoryboard.init(name: "Main4", bundle:Bundle.main).instantiateViewController(withIdentifier: "MeetingDetailVC") as? MeetingDetailVC

vc.yourID = id

self.navigationController?.pushViewController(vc!, animated: true)

}

Примечание. Вам не нужно for loop в cellForRow. Вы можете изменить его на:

cell.meetingTimeLabel?.text = (self.meeting[indexPath.row]["time"] as? String) ?? "No Time"
cell.meetingDateLabel?.text = (self.meeting[indexPath.row]["date"] as? String) ?? "No Date"
cell.idLabel?.text = (self.meeting[indexPath.row] as! String) ?? "NO ID"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...