Использование структуры в 2 tableViews (a tabelView внутри другого tabelView) - PullRequest
0 голосов
/ 06 сентября 2018

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

Первая структура имеет имя группы, ее местоположение и массив ее членов. вторая структура имела имя, фамилию и роль члена.

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

У меня нет проблем с первым представлением таблицы, но я полностью теряюсь, когда дело касается второго.

Я приветствую любую помощь. Приветствия. Jonas

Я добавлю код ниже.

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var band = [Band]()
var members = [Member]()

@IBOutlet weak var firstTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    firstTableView.delegate = self
    firstTableView.dataSource = self

    addBandsAndMembers()

}

func addBandsAndMembers() {
    members.append(Member(firstName: "Eddie", lastName: "Vedder", role: "Singer"))
    members.append(Member(firstName: "Stone", lastName: "Gossard", role: "Guitar"))
    members.append(Member(firstName: "Mike", lastName: "McCready", role: "Guitar"))
    members.append(Member(firstName: "Jeff", lastName: "Ament", role: "Bass"))
    members.append(Member(firstName: "Matt", lastName: "Cameron", role: "Drums"))

    band.append(Band(name: "Pearl Jam", place: "Seattle", members: members))

    members.removeAll()

    members.append(Member(firstName: "Andy", lastName: "Wood", role: "Singer"))
    members.append(Member(firstName: "Stone", lastName: "Gossard", role: "Guitar"))
    members.append(Member(firstName: "Bruce", lastName: "Fairweather", role: "Guitar"))
    members.append(Member(firstName: "Jeff", lastName: "Ament", role: "Bass"))
    members.append(Member(firstName: "Greg", lastName: "Gilmore", role: "Drums"))

    band.append(Band(name: "Mother Love Bone", place: "Seattle", members: members))
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView.tag == 100 {
        return band.count
    }else {
        return band.count    // This is puzzeling me
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableView.tag == 100 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "firstTableViewCell", for: indexPath) as! firstTableViewCell
            cell.label.text = band[indexPath.row].name
        return cell
    }else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "secondTableViewCell", for: indexPath) as! secondTableViewCell
        cell.firstName.text = band[indexPath.row].members[indexPath.row].firstName
        print(band[indexPath.row].members[indexPath.row].firstName)
        return cell
    }
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if tableView.tag == 100 {
        return 190
    }else {
        return 35
    }
}
}


class firstTableViewCell: UITableViewCell {
@IBOutlet weak var secondTableView: UITableView!
@IBOutlet weak var label: UILabel!

func setTableViewDataSourceDelegate <D: UITableViewDelegate & UITableViewDataSource> (_ dataSourceDelegate: D, forRow rom: Int){
    secondTableView.delegate = dataSourceDelegate
    secondTableView.dataSource = dataSourceDelegate
    secondTableView.reloadData()
}
}

class secondTableViewCell: UITableViewCell {
@IBOutlet weak var firstName: UILabel!
@IBOutlet weak var lastName: UILabel!
@IBOutlet weak var role: UILabel!

}

struct Band {
var name: String
var place: String
var members: [Member]
}

struct Member {
var firstName: String
var lastName: String
var role: String
}

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

Изображение прилагается.

First Tableview имеет список групп. Во втором табличном представлении есть список участников этой группы

image

1 Ответ

0 голосов
/ 06 сентября 2018

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

func numberOfSections(in tableView: UITableView) -> Int {
    return bands.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    return bands[section].members.count
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return bands[section].name
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "secondTableViewCell", for: indexPath) as! secondTableViewCell
    // Configure the cell here...
    return cell
}

Кроме того, я бы переименовал secondTableViewCell в BandMemberCell, чтобы было ясно, что он представляет.

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