Я знаю, как передавать данные из UITableViewController в другой ViewController. * Оба контроллера - UITableViewController
.Передача данных между TableViewControllers.using didSelect и navigationController без раскадровки в Swift 3
Например:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as UITableViewCell
let viewcontroller = NextViewController()
viewcontroller.someText = "Any text"
self.navigationController?.pushViewController(viewcontroller, animated: true)
}
Что это делает, когда я выбираю ячейку в TableViewController, в следующем контроллере представления, например UILabel
, скажем MyLabel, установлена и переменная строка готовят SOMETEXT , И установите как self.myLabel.text = someText
. И когда выбрана строка, то во втором контроллере представления отображается «Любой текст».
Однако это не то, что я хочу использовать. Я имею в виду, моя цель я пытаюсь достичь:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as UITableViewCell
//In this case, the next view controller is UITableView.
let viewcontroller = NextViewController()
// I want a selected cell to lead to contain an array of String,
//so that next view controller will hold multiple cells.
// which are only unique to each cell in first TableViewController.
viewcontroller.someArray = array????
self.navigationController?.pushViewController(viewcontroller, animated: true)
}
Update
В моей SecondTableViewCOntroller
Существует nvaigationBar и клетки получают путем добавления текста по UITextField
внутри UIAlertAction. Эти данные сохраняются с помощью UserDefaults.standfard с «table2». Кроме того, существует переменная, массив из набора String;
//Gloabally Declared
var myArray = [String]();
var array = [String]();
//This function is displayed in didViewLoad()
func data(){
if let myArray = savedata.stringArray(forKey: KEY) {
array = myArray
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as UITableViewCell
for object in cell.contentView.subviews
{
object.removeFromSuperview();
}
let getData = UserDefaults.standard.stringArray(forKey:"table2")
cell.textLabel?.text = getData[indexPath.row]
cell.textLabel?.font = UIFont(name: familyFont, size: 19)
cell.textLabel?.font = UIFont.systemFont(ofSize: 19)
cell.textLabel?.textColor = UIColor.darkGray
cell.accessoryType = .disclosureIndicator
cell.textLabel?.textAlignment = .center
return cell
}
В моей FirstTableViewController
:
В этом tableViewController
клетки заполняются путем добавления текста в UITextField
помещенного на navigationBar
. Затем я хочу, чтобы выбранная ячейка удерживала ячейки, созданные в SecondTableViewController
, добавив текст UITextField
insdie UIAlertAction
. Эти данные сохраняются с UserDefaults.standfard с «table1»
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as UITableViewCell
for object in cell.contentView.subviews
{
object.removeFromSuperview();
}
let getData = UserDefaults.standard.stringArray(forKey:"table1")
cell.textLabel?.myArray = getData[indexPath.row]
cell.textLabel?.font = UIFont(name: familyFont, size: 19)
cell.textLabel?.font = UIFont.systemFont(ofSize: 19)
cell.textLabel?.textColor = UIColor.darkGray
cell.accessoryType = .disclosureIndicator
cell.textLabel?.textAlignment = .center
return cell
}
Я не знаю, как реализовать код, который достигает этой цели. Я исследовал сообщения и искал так сильно, но я мог найти только про передачу данных между контроллером представления и контроллером табличного представления, но в моем случае речь идет о передаче данных между TableView в TableView. Таким образом, это может помочь другим, у которых тоже есть проблемы.
Это прослушивало меня в течение длительного времени. Пожалуйста, помогите мне ...
Спасибо!
Если это не viewController, как вы можете нажать это? Если это обычный вид таблицы/пользовательский вид, вы должны добавить это как подвью. А для передачи данных вы можете настроить метод init. – Janmenjaya
Можете ли вы показать метод cellForRowAt indexPath', чтобы очистить то, что вы хотите передать как массив. –
обновленный, проверьте пожалуйста. – Ryo