2016-11-15 2 views
0

Я знаю, как передавать данные из 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. Таким образом, это может помочь другим, у которых тоже есть проблемы.

Это прослушивало меня в течение длительного времени. Пожалуйста, помогите мне ...

Спасибо!

+0

Если это не viewController, как вы можете нажать это? Если это обычный вид таблицы/пользовательский вид, вы должны добавить это как подвью. А для передачи данных вы можете настроить метод init. – Janmenjaya

+0

Можете ли вы показать метод cellForRowAt indexPath', чтобы очистить то, что вы хотите передать как массив. –

+0

обновленный, проверьте пожалуйста. – Ryo

ответ

0

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

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let vc = NewTableViewController() 
    vc.dataSourceArray = array 
    self.navigationController.pushViewController(vc, animated: true) 
} 

Затем в новом Tableview установить ваши numberForSections(), numForRows() и cellForIndexPath() на основе вашего dataSourceArray. Это заполнит новый tableView переданными данными.

+0

обновленный, проверьте пожалуйста. – Ryo

0

В соответствии с вашим вопросом, я думаю, вы пытаетесь отправить свои данные в пользовательский класс просмотра, а не в класс viewController.

Поэтому я предложил настроить метод класса init.

NB: Код, показанный ниже, написан в Swift 2.1.

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

Код:

В заказ Просмотр

init(frame: CGRect, arrData: NSArray) { 
    super.init(frame: frame) 

    arrListData = NSMutableArray(array: arrData) 

    //In this method I have designed the table view 
    designListView(); 
} 

В ViewController:

func ListButtonClicked() 
{ 
    let arr = ["Asia", "Europe", "Africa", "North America", "South America", "Australia", "Antarctica"] 

    dropDownlist = DropdownView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height), arrData: arr); 
    dropDownlist.backgroundColor = UIColor.clearColor(); 
    self.view.addSubview(dropDownlist) 
} 

Здесь я упомянул часть кода, но для вашего удобства Я добавляю экран вывода так, чтобы вы можете проверить, соответствует ли это вашим требованиям или нет.

Мой выход: enter image description here

Hoep это помогает.

Счастливое кодирование ...

Смежные вопросы