如何从自定义 UITableViewCell 调用操作以重新加载 tableView
Posted
技术标签:
【中文标题】如何从自定义 UITableViewCell 调用操作以重新加载 tableView【英文标题】:How to call an action from a Custom UITableViewCell for reload tableView 【发布时间】:2011-05-17 21:21:03 【问题描述】:我有一个简单的问题:我无法在UITableViewCell
.m 中从UIButton
调用"[tableView reloadData]"
。
我有一个tableView
,它显示每行包含UIButton
的UITableViewCell
。当我点击单元格的按钮时,我想从我的 tableView 中重新加载数据。
【问题讨论】:
【参考方案1】:只要您持有对 tableView 的引用,您就应该能够通过点击按钮重新加载数据。最简单的方法是在头文件中进行引用
@interface MyClass ...
UITableView *myTableView;
// all your other stuff;
// any methods and properties you want to declare;
@end
然后,当您在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中将按钮放入单元格时,请执行以下操作
UIButton *myButton = [UIButton buttonWithType:whateverTypeYouPick];
[myButton addTarget:self action:@selector(reloadTableView) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:myButton]; // or cell.contentView or wherever you want to place it
然后简单地设置你的操作方法
- (IBAction)reloadTableView
[myTableView reloadData];
// anything else you would like to do;
我对此进行了测试,它对我来说效果很好,所以希望它也对你有用
【讨论】:
谢谢提示,我现在试试并回复结果:) 非常感谢 slev,它真的帮了我很多 ^^。我只在 cellForRowAtIndexPath 上更改了这部分:方法:code
( [cell.myButton addTarget:self action:@selector(reloadTableView:) forControlEvents:UIControlEventTouchUpInside]; return cell; )
太棒了。我很高兴它对你有用。祝你好运,我很高兴能帮上忙 =]【参考方案2】:
其中一种方法是在 Cell 上设置委托,并在操作发生时让 tableViewController 实现委托。
MyCell.h
@protocol MyCellDelegate
-(void)myCell:(MyCell*)cell reloadTableView:(id)sender;
@end
@interface MyCell : UITableViewCell
@property (nonatomic, weak) id <MyCellDelegate> delegate;
-(IBAction)reloadTableView:(id)sender;
@end
MyCell.m
@implementation MyCell
@property (nonatomic, weak) id <MyCellDelegate> delegate;
-(IBAction)reloadTableView:(id)sender;
if(self.delegate)
[self.delegate myCell:self reloadTableView:sender];
@end
在tableViewController中实现委托方法,做你想做的任务。
-(void)myCell:(MyCell*)cell reloadTableView:(id)sender;
CGPoint location = [sender locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
//Here is the indexPath
[self.tableView reloadData];
【讨论】:
以上是关于如何从自定义 UITableViewCell 调用操作以重新加载 tableView的主要内容,如果未能解决你的问题,请参考以下文章
如何从自定义 UITableViewCell 获取值到 ViewController?
如何从自定义 UITableViewCell 触发 segue - iOS7
为啥 Core Data 获取请求从自定义 UITableViewCell 返回空?
如何从自定义操作中进入删除确认状态 UITableViewCell?
如何执行从自定义 UITableViewCell(xib) 到另一个 ViewController 的 segue 视图