如何从自定义UITableViewCell调用操作以重新加载tableView

时间:2011-05-17 21:21:04

标签: iphone uitableview uibutton reloaddata

我遇到一个简单的问题:我无法通过"[tableView reloadData]" .m中的UIButton来致电UITableViewCell

我有一个tableView,显示每行包含UITableViewCell的{​​{1}}。当我单击单元格的按钮时,我想从tableView重新加载数据。

2 个答案:

答案 0 :(得分:0)

只要您拥有对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;
}

我对此进行了测试,它对我来说效果很好,所以希望它能为你做到这一点

答案 1 :(得分:0)

其中一种方法是在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中实现delegate方法并执行您要执行的任务。

-(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];
}