在 Swift 中设置 UICollectionView 删除按钮

Posted

技术标签:

【中文标题】在 Swift 中设置 UICollectionView 删除按钮【英文标题】:Set up a UICollectionView delete button in Swift 【发布时间】:2015-08-18 09:13:47 【问题描述】:

我正在构建一个应用程序,它使用集合视图来显示用户可以删除的数据。

在原型单元格中,我创建了一个按钮,该按钮现在出现在所创建的每个单元格中(一个小 X)。如何设置按钮来告诉我应该删除哪个单元格(如 indexPath.row)?

原则上,我想做这样的事情,但在 Swift 中:link

如果有任何帮助,我将不胜感激!谢谢

【问题讨论】:

【参考方案1】:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    ...
    UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(123, 123, 40, 40)];
    [myButton setTitle:@"X" forState:UIControlStateNormal];
    [myButton setBackgroundImage:[UIImage imageNamed:@"cellDeleteBtn.png"] forState:UIControlStateNormal];
    [myButton setTag:indexPath.row];
    [myButton addTarget:self action:@selector(deleteCellFromButton:) forControlEvents:UIControlEventTouchUpInside];
    [cell addSubview:myButton];
    return cell;


- (void)deleteCellFromButton:(UIButton *)button

    [myMutableArray deleteItemAtIndex:button.tag];
    [collectionView reloadData];

这是一个 Swift 版本:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    var myButton: UIButton = UIButton(frame: CGRectMake(123, 123, 40, 40))
    myButton.setTitle("X", forState: UIControlStateNormal)
    myButton.setBackgroundImage(UIImage.imageNamed("cellDeleteBtn.png"), forState: UIControlStateNormal)
    myButton.setTag(indexPath.row)
    myButton.addTarget(self, action: "deleteCellFromButton:", forControlEvents: UIControlEventTouchUpInside)
    cell.addSubview(myButton)
    return cell


func deleteCellFromButton(button: UIButton) 
    myMutableArray.deleteItemAtIndex(button.tag)
    collectionView.reloadData()

【讨论】:

对不起,现在才看到它很快。更新了标题 我不确定如何设置 indexPath.row 你不知道怎么设置是什么意思。你在什么时候挣扎然后我们可以从那里进一步解释。 从按钮创建插座时出现错误:插座因重复内容而无效(即它出现在每个单元格中) 由于无法创建outlet,以上方法都行不通【参考方案2】:
serviceView.collectionArray.removeAtIndex(path.row)
serviceView.collectionView.deleteItemsAtIndexPaths([path])

【讨论】:

该按钮没有 indexPath.row,因为它在每个单元格中都可用 然后用 indexPath.row 标记按钮? 我更新了我的 ObjC 答案,可能有助于在 Swift 中自己完成。 :)

以上是关于在 Swift 中设置 UICollectionView 删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

swift:在导航栏中设置后退按钮图像

在 Swift 中设置多次通知

在 Swift 中设置自定义 NavigationBar 的最简单方法是啥?

如何在 Swift 中设置导航栏的标题? [复制]

如何在 Swift 中设置单元测试?

在 Swift 3 中设置 StatusBarStyle [重复]