Добавление последней ячейки как кнопки - PullRequest
0 голосов
/ 23 января 2020

Here is my CollectionView with cells

Мне нужно установить последнюю ячейку как кнопку, которая может добавить новую ячейку в этот массив ячеек. вот мой код

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let category = self.categories[indexPath.row]
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CategoryCollectionViewCell.name, for: indexPath) as! CategoryCollectionViewCell
    cell.label.text = category.name
    return cell
}
private var categories = [Category]()
    private func createCustomCategories() {
    let categoryOne = Category(id: "01", name: "B")
    let categoryTwo = Category(id: "02", name: "Weddings")
    let categoryThree = Category(id: "03", name: "Just want it")
    let addButton = Category(id: "none", name: "+ add")
    self.categories.append(contentsOf: [categoryOne, categoryTwo, categoryThree])
    self.categories.append(addButton)
}

Ответы [ 4 ]

2 голосов
/ 23 января 2020

Создайте и класс CustomCell для представления ваших категорий, и другой класс ButtonCell для представления вашей кнопки,

, предполагая, что это ваш массив элементов :

var items = [1,2,3,4,5]

в ваших источниках данных добавьте +1 для вашей кнопки

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count + 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.row == items.count {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "\(ButtonCell)", for: indexPath) as? UITableViewCell else {return UITableViewCell()}
        } else {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "\ . 
 (YourSelf)", for: indexPath) as? UITableViewCell else {return UITableViewCell()}
     }     
 }
1 голос
/ 23 января 2020

Почему бы просто не добавить кнопку с уникальным идентификатором в категории?

let addButton = Category(id: "UniqueID", name: "+ add")
// append the addButton in category array
self.categories.append(contentsOf: [categoryOne, categoryTwo, categoryThree, addButton])

А затем просто включите Id, а также есть отдельная ячейка для кнопки.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let category = self.categories[indexPath.row]
    // check for category.id == your uniqueID that you have appended above
    if category.id == "UniqueID" {
      // Make sure you have another collectionViewCell and use its identifier in here
      let cell = collectionView.dequeueReusableCell(withReuseIdentifier:AddButtonCell.name, for: indexPath) as! AddButtonCell
        // set the label here
        cell.label.text = category.name
        return cell
    } else {
        // use your original collectionview cell here.
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CategoryCollectionViewCell.name, for: indexPath) as! CategoryCollectionViewCell
        cell.label.text = category.name
        return cell
    }
}
1 голос
/ 23 января 2020

Вы можете сделать это так:

на numberOfItemsInSection return self.categories.count +1

И на cellForRow:

if indexPath.item > categories.count{ //last element of categories array is passed
cell.label.text = "+ add"
}

Надеюсь, это поможет ...

0 голосов
/ 24 января 2020

Я сделал это, но всегда получаю индекс нашего диапазона

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return categories.count + 1
}


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

       let category = categories[indexPath.item]


       if indexPath.item == categories.count + 1 {
           guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CategoryCollectionViewCell.name, for: indexPath) as? CategoryCollectionViewCell else { return UICollectionViewCell.init() }
           cell.setText(text: "add")
           return cell
       } else {
            guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CategoryCollectionViewCell.name, for: indexPath) as? CategoryCollectionViewCell else {return UICollectionViewCell.init()}
            cell.setText(text: category.name!)
            return cell
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...