如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图
Posted
技术标签:
【中文标题】如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图【英文标题】:How to remove subview added in other TableView cell when tap on one cell, in Custom swipe (instead of swipe to delete) Cell (swipe to mail/sms) 【发布时间】:2012-11-15 05:09:51 【问题描述】:在我的 iPhone UITable 视图应用程序中
当用户在表格视图单元格/行上滑动时,我需要添加两个按钮。
一个用于撰写邮件按钮一个用于发送短信按钮给联系人。
我现在实现了以下代码来添加发送邮件(蓝色云按钮)
//Add a left swipe gesture recognizer in view Did load
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(swipeRow:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[contactsTable addGestureRecognizer:recognizer];
[recognizer release];
- (void)swipeRow:(UISwipeGestureRecognizer *)gestureRecognizer
//Get location of the swipe
CGPoint location = [gestureRecognizer locationInView:contactsTable];
NSIndexPath *indexPath = [contactsTable indexPathForRowAtPoint:location];
UITableViewCell *cell = [contactsTable cellForRowAtIndexPath:indexPath];
UIButton *MailButton = [UIButton buttonWithType:UIButtonTypeCustom];
[MailButton setBackgroundImage:[UIImage imageNamed:@"sendData.png"] forState:UIControlStateNormal];
MailButton.frame=CGRectMake(150, 0, 40.0, 30.0);
[MailButton addTarget:self action:@selector(SendMail) forControlEvents:UIControlEventTouchUpInside];
//Add mail button if index path is valid
if(indexPath)
[cell addSubview:MailButton];
当我们在单元格上滑动时,它执行得很好,并将按钮添加到选定的单元格/行。
But when we swipe another cell the buttons on the previous cell are does not hide / removed
重复如下
我不想在其他单元格上显示(删除)按钮,同时在另一个单元格上轻扫,一次只有一个云按钮..
【问题讨论】:
【参考方案1】:为什么不可以将按钮保留在 XIb 中并将其添加到相应的单元格中?它是整个类的单个对象,因此以前的单元格中不会有重复的按钮。请尝试。
【讨论】:
【参考方案2】:您需要一个 ivar 来存储您添加云按钮的 lastIndexPath。 每次添加新按钮时,您都必须从先前添加的 indexPath 中删除该按钮并将新的 indexPath 分配给 ivar。
您的代码可能如下所示(未经测试)。
在类似属性的 .h 文件中
@property (strong, nonatomic) NSIndexPath *lastIndexPath;
并在.m文件中合成它。
现在代码将如下所示
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(swipeRow:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[contactsTable addGestureRecognizer:recognizer];
[recognizer release];
- (void)swipeRow:(UISwipeGestureRecognizer *)gestureRecognizer
//Get location of the swipe
CGPoint location = [gestureRecognizer locationInView:contactsTable];
NSIndexPath *indexPath = [contactsTable indexPathForRowAtPoint:location];
//New Code
UITableViewCell *cell = [contactsTable cellForRowAtIndexPath:indexPath];
if(lastIndexPath != nil)
UITableViewCell *last = [contactsTable cellForRowAtIndexPath:lastIndexPath];
//End
UIButton *MailButton = [UIButton buttonWithType:UIButtonTypeCustom];
[MailButton setBackgroundImage:[UIImage imageNamed:@"sendData.png"] forState:UIControlStateNormal];
MailButton.frame=CGRectMake(150, 0, 40.0, 30.0);
[MailButton addTarget:self action:@selector(SendMail) forControlEvents:UIControlEventTouchUpInside];
MailButton.tag = 1111;// New code
//Add mail button if index path is valid
if(indexPath)
//New Code
UIButton *mb = (UIButton *) [cell viewWithTag:1111];
[mb removeFromSuperview];
//End
[cell addSubview:MailButton];
lastIndexPath = indexPath;// New Code
【讨论】:
以上是关于如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 UITableCell 上的右滑动并显示自定义按钮而不是删除按钮
如何在 TAP 上编辑 tableview 单元格而不是滑动 - Swift
如何制作可滑动的 UItableview 标题以显示像单元格一样的删除按钮