Два табличных представления в одном контроллере представления Swift с didSelectRowAtIndexPath в swift2.0

У меня есть два представления таблицы в одном контроллере представления. Предположим, что это таблицы table1 и table2. Когда я выбираю строку в таблице 1, я хочу изменить данные в таблице 2. Как я могу это сделать? (Я не могу использовать идентификаторы перехода, потому что эти таблицы находятся в одном окне)

Мой код выглядит следующим образом. И в моей таблице 1 у меня есть массив уроков 1. В таблице 2 у меня есть массив уроков 2. Итак, теперь я хочу щелкнуть вторую строку таблицы 1 и отобразить данные в массиве ресурсов в таблице 2. Аналогичным образом. Не могли бы вы помочь мне с кодом. Я пробовал следующим образом. Но я знаю, что это совершенно неправильно.

 let Resources = ["Word Doc on Probability", "Extra Sums", "Homework","",""]

 let lessons1 = ["Term1", "Term2"," Term3"]

 let Lessons2 = ["Create a set theory", "Draw Ven Diagrams", "iOS Developer Tips"]

  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of items in the sample data structure.

var count:Int?

if tableView.tag == 3 {
    count = lessons1.count
}
 else if tableView.tag == 4 {
    count = Lessons2.count
} return count!


}
       func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

var cell:UITableViewCell?

if tableView.tag == 3 {
    cell = tableView.dequeueReusableCellWithIdentifier("TextCell3", forIndexPath: indexPath)

    let row = indexPath.row
    cell!.textLabel!.text = lessons1[row]

}

 else if tableView.tag == 4 {
    cell = tableView.dequeueReusableCellWithIdentifier("TextCell4", forIndexPath: indexPath)

    let row = indexPath.row
    cell!.textLabel!.text = Lessons2[row]

}

return cell!
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
  ////this code is wrong/////
let row = indexPath.row
if tableView.tag == 3 {
    if indexPath.row == 1 {
        let cell = tableView.dequeueReusableCellWithIdentifier("TextCell4", forIndexPath: indexPath)


        cell.textLabel!.text = Objectives[row]
        lessons.reloadData()

    }

}

person Emily    schedule 08.11.2016    source источник
comment
Вы установили тег в super.viewDidLoad()?   -  person iDeveloper    schedule 08.11.2016
comment
table1.tag = 1 и table2.tag = 2   -  person iDeveloper    schedule 08.11.2016
comment
да в раскадровке я установил это   -  person Emily    schedule 08.11.2016


Ответы (1)


TableView отражает данные, хранящиеся в вашей модели. Когда строка выбрана в table1, обновите данные в модели для table2, а затем вызовите table2.reloadData().

@IBOutlet tableView1: UITableView!
@IBOutlet tableView2: UITableView!

let Resources = ["Word Doc on Probability", "Extra Sums", "Homework","",""]

let lessons1 = ["Term1", "Term2"," Term3"]

let Lessons2 = ["Create a set theory", "Draw Ven Diagrams", "iOS Developer Tips"]

var dataForTable1 = [String]()
var dataForTable2 = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    dataForTable1 = lessons1
    dataForTable2 = Lessons2
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // Return the number of items in the sample data structure.

    var count = 0

    if tableView.tag == 3 {
        count = dataForTable1.count
    }
    else if tableView.tag == 4 {
        count = dataForTable2.count
    }

    return count

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:UITableViewCell?

    if tableView.tag == 3 {
        cell = tableView.dequeueReusableCellWithIdentifier("TextCell3", forIndexPath: indexPath)

        let row = indexPath.row
        cell!.textLabel!.text = dataForTable1[row]

    }

    else if tableView.tag == 4 {
        cell = tableView.dequeueReusableCellWithIdentifier("TextCell4", forIndexPath: indexPath)

        let row = indexPath.row
        cell!.textLabel!.text = dataForTable2[row]

    }

    return cell!
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    let row = indexPath.row
    if tableView.tag == 3 {
        if indexPath.row == 1 {
            dataForTable2 = Resources
            tableView2.reloadData()

        }
    }
}
person vacawama    schedule 08.11.2016
comment
Как я могу это сделать? - person Emily; 08.11.2016
comment
Вам нужно привести лучший пример того, что показывают ваши две таблицы. Например, если у вас есть список слов, ваша первая таблица может состоять из букв алфавита, а вторая таблица может содержать все слова, начинающиеся с этой буквы. В didSelectRowAtIndexPath вы получите букву, соответствующую строке первой таблицы, а затем отфильтруете массив слов, чтобы создать массив, который будет отображаться в таблице 2. Затем вы вызовете table2.reloadData(), и он будет использовать этот массив для отображения слова. - person vacawama; 08.11.2016