Передача данных из статической tableViewCell в другой viewController? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть tableView со статическими ячейками.

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

Так как мне передавать данные (что написано в ячейке)когда выделена ячейка?

Это код в didSelectRowAtIndexPath?

Использую ли я segues?Тогда должно быть сотни сегментов, если у меня есть сотни ячеек, которые пользователь может выбрать, верно?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Как насчет простого способа.Это похоже на ответ Ali_Habeeb с более подробной информацией.

В вашем didSelectRowAt:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let question = yourDataArray[indexPath.row]
    let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil)
    let newVC = storyboard.instantiateViewController(withIdentifier: "newVCIdentifier") as! NewViewController
    newVC.choosenQuestion = question
    self.show(newVC, sender: self)
}

В вашем новом VC:

class NewViewController: UIViewController {

  @IBOutlet weak var DiaryQuestionLabel: UILabel!

  var choosenQuestion = ""

  override func viewDidLoad() {
     super.viewDidLoad()
     DiaryQuestionLabel.text = choosenQuestion
  }
}

Это очень простой формат, и он не должен выдавать никаких ошибок, а если это так, проверьте ваш массив данных.

0 голосов
/ 09 октября 2018

Вы пытаетесь присвоить неверный тип вашим переменным.Это является причиной ваших ошибок.
Например,
Вы определили chosenQuestion как массив значений String, т. Е. [String], но вы пытаетесь присвоить IndexPath с помощью следующего оператора, vc?.chosenQuestion = selectedRowIndex.

Чтобы решить вашу проблему,
Вам необходимо извлечь конкретную строку из вашего источника данных, используя IndexPath, который вы сохранили в переменной selectedRowIndex.

Например, если ваш массив источника данных называется myArray, вы можете сделать следующее:

var selectedRowIndex = self.tableView.indexPathForSelectedRow
vc?.chosenQuestion = myArray[selectedRowIndex]

и затем изменить свою переменную,
var chosenQuestion = ""

Наконец, внутри viewDidLoad():
DiaryQuestionLabel.text = chosenQuestion

0 голосов
/ 09 октября 2018

Сначала вы назначаете массив строк в DiaryQuestionLabel.text, который принимает строку только в destinationViewController.Просто измените тип selectedQuestion на String в destinationViewController, как показано ниже.

@IBOutlet weak var DiaryQuestionLabel: UILabel!
var chosenQuestion: String = ""

override func viewDidLoad() {
   super.viewDidLoad()
   DiaryQuestionLabel.text = chosenQuestion
}

В вашем tableViewController Вам нужно передать значение выбранного индекса из массива источника данных, который вы использовали для установки данных в ячейке tableview.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if segue.destination is UpdatingIdentifiers {
     let vc = segue.destination as? UpdatingIdentifiers
     let selectedRowIndex = self.tableView.indexPathForSelectedRow()
     // Get tableviewcell object from indexpath and assign it's value to chosenQuestion of another controller.  
     let cell = yourtableview.cellForRow(at: selectedRowIndex)
     let label = cell.viewWithTag(420) as! UILabel
     vc?.chosenQuestion = label.text
    }
}
0 голосов
/ 09 октября 2018

Текстовая метка имеет тип String.Вы присваиваете ему массив строк.Также та же самая ошибка, которую вы делаете, присваивая indexPath массиву строк.Вы возитесь с типами.

Измените на это:

vc?.chosenQuestion = tableView.cellForRow(at: selectedRowIndex).textLabel?.text

Измените вашу переменную на

var chosenQuestion = ""

И в viewDidLoad ()

DiaryQuestionLabel.text = chosenQuestion
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...