将自定义TableViewCell操作发送到UITableView

时间:2015-06-16 18:43:30

标签: ios objective-c uitableview tableviewcell

在一个小型iOS应用程序上工作,我为我的UITableView创建了一个自定义的tableview单元格(以及它自己的类)。单元格中的两个内容是“添加”和“删除”按钮。单击这些时,我需要更新UITableView中的数组对象,但由于表格单元格是一个单独的类,如何将这些更改发送到UITableView类?

例如,下面的代码是我单元格上的“删除”按钮:

- (IBAction)decrementItem:(id)sender {
    int count = (int)[self.specificItemCount.text integerValue];
    //Cannot have negative amount of food
    if(count == 0) {
        return;
    } else {
        count--;
        self.specificItemCount.text = [NSString stringWithFormat:@"%i",count];
    }

但是当我点击该按钮时,我需要在表格视图中更新我的数组对象,我该怎么做?

2 个答案:

答案 0 :(得分:0)

在您的tableview类将实现的单元类上定义一个协议。这是一个例子:http://www.tutorialspoint.com/ios/ios_delegates.htm。然后将tableview设置为单元格上的委托(确保使用弱引用)。

答案 1 :(得分:0)

使用委托或阻止。 如果您只有一个电池可以工作,我建议您使用一块。

定义块,在需要时调用

// CustomCell.h
@interface CustomCell : UITableViewCell
@property (nonatomic, copy) void(^addBlock)(NSString *text);
@property (nonatomic, copy) void(^removeBlock)(NSString *text);
@end

// CustomCell.m
- (IBAction)decrementItem:(id)sender {
    int count = (int)[self.specificItemCount.text integerValue];
    //Cannot have negative amount of food
    if(count == 0) {
        return;
    } else {
        count--;
        self.specificItemCount.text = [NSString stringWithFormat:@"%i",count];
    }
    if (removeBlock) {
        removeBlock(self.specificItemCount.text)
    }
}

在内部编写所需的操作

// VC.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath == customIndexPath) {
        CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:customIdentifier forIndexPath:indexPath];
        __weak typeof(self)weakSelf = self;
        cell.removeBlock = ^(NSString *text) {
            __strong typeof(weakSelf)strongSelf = weakSelf;
            // operation
        };
        cell.addBlock = ^(NSString *text) {
            __strong typeof(weakSelf)strongSelf = weakSelf;
            // operation
        };
        return customCell;
    }
    // ······
}