Вставить пользовательскую ячейку в TableView - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть UITableView, который заполняет пользовательские ячейки на основе входящих данных:

var posts: [PostViewModel] = [] {
        didSet {
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }

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

  1. Почтовая ячейка
  2. Почтовая ячейка
  3. Почтовая ячейка
  4. Входная ячейка
  5. Почтовая ячейка
  6. et c ...

Как бы я go отнесся к такому подходу, поскольку ячейка не имеет ничего общего с моделью.

Спасибо.

1 Ответ

2 голосов
/ 08 апреля 2020

Из моей практики лучше создать собственный тип ячейки. И добавьте этот тип в качестве свойства к вашей PostViewModel. После этого вы можете узнать, какой тип ячейки вы должны удалить. Например:

// Type of custom cell
enum PostsType {
    case postCell
    case loginCell
}

struct PostViewModel {
    let type: PostsType
    // another View model data
}

class ViewController: UITableViewController {

    var posts: [PostViewModel] = [] {
        didSet {
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        posts.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellType = posts[indexPath.row].type

        switch cellType {
        case .loginCell:
            return tableView.dequeueReusableCell(withIdentifier: "LoginCell", for: indexPath)
        case .postCell:
            return tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...