UICollecionView внутри UITableView. Как обрабатывать выборы? - PullRequest
0 голосов
/ 19 марта 2019

Я делаю форму с tableView с несколькими типами ячеек.Один из этих типов содержит UICollectionView с кнопками для выбора некоторых ответов.

Мне нужно иметь возможность скрывать или отображать строки в таблице относительно ответов.Например: когда ответ на вопрос 2 «Нет», вопрос 3 больше не отображается.

Но я не знаю, как сделать так, чтобы табличное представление знало, что выбирается в одной из его ячеек

В ячейке, содержащей UICollectionView, у меня есть этот метод

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let indexPath = optionsCollectionView.indexPathsForSelectedItems?.first
    let cell = collectionView.cellForItem(at: indexPath!) as! OptionsCollectionViewCell
    let data = cell.itemButton.titleLabel?.text
    selectedItem = data

}

Но я не знаю, как автоматически передать его в табличное представление, чтобы он знал, какие строки отображать или скрывать ... Любая идея?

это мой cellForRowAt

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if sortedFixedContentType.count != 0 {
        let item = sortedFixedContentType[indexPath.row]

        switch item.typeId {
        case "42":
            let cell = tableView.dequeueReusableCell(withIdentifier: "FormFileCell", for: indexPath) as! FormFileCell
            return cell;
        case "39":
            let cell = tableView.dequeueReusableCell(withIdentifier: "FormExpenseTypeCell", for: indexPath) as! FormExpenseTypeCell


            return cell;
        case "86":
            let cell = tableView.dequeueReusableCell(withIdentifier: "FormExpensePaymentModeCell", for: indexPath) as! FormExpensePaymentModeCell
            return cell;
        case "87":
            let cell = tableView.dequeueReusableCell(withIdentifier: "FormExpenseFileTypeCell", for: indexPath) as! FormExpenseFileTypeCell

            return cell;
        case "88":
            let cell = tableView.dequeueReusableCell(withIdentifier: "FormProviderCell", for: indexPath) as! FormProviderCell
            return cell;
        default:
            let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! BaseFormCell
            cell.idLabel.text = item.htmlType
            return cell
        }
    }
    else {
        let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! BaseFormCell
        cell.idLabel.text = ""
        return cell
    }
}

Спасибо

1 Ответ

3 голосов
/ 19 марта 2019

Для этого есть четыре шага: -

1. Сначала создайте протокол, скажем «CustomCellDelegate» в вашей пользовательской ячейке, где вы используете collectionview внутри, и создайте переменную, которая будет содержать пользовательский делегат простов качестве примера предположим, что вашим именем ячейки является CustomCell, создайте CustomCellDelegate и объявите его как customDelegate

protocol CustomCellDelegate : class {
    func Method1()
}

class CustomCell : UITableViewCell {
    var customDelegate : CustomCellDelegate?
}

2. Затем вам нужно запустить этот делегат из класса CustomView. Метод делегирования collectionView didSelectItem.*

3. В-третьих, присвойте customDelegate контроллеру представления, в который вы хотите получить делегата, например, myViewController, здесь

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "customeCellIdentifier", for: indexPath) as! CustomCell
    cell.customDelegate = self // myViewController
    return cell
}

4.Отправьте делегата в вашем контроллере представления следующим образом

extension myViewController : CustomCellDelegate {
    func Method1() {
        print("Method 1 called")
    }
}

Надеюсь, это решит вашу проблему, дайте мне знать, если вы найдете этот ответ полезным. Ура !!

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