从UItableviewcell重新加载TableView数据

时间:2012-08-15 01:52:25

标签: ios uitableview

我在UITableviewcell的子类中有一个IBaction,我很难让它重新加载tableview的数据。它看起来很简单,但我尝试了很多工作人员,但没有任何工作。

以下,我在UITableviewcell中使用的代码,但没有重新加载:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (IBAction)deleterow:(id)sender
{
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Delete content ?"
                                                      message:@"Do you want to delete ?"
                                                     delegate:self
                                            cancelButtonTitle:@"Cancelar"
                                            otherButtonTitles:@"Eliminar", nil];
    [message show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];

    if ([title isEqualToString:@"Eliminar"])
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);        
        NSString *documentsDirectory = [paths objectAtIndex:0];        
        NSString *path = [documentsDirectory stringByAppendingPathComponent:@"datatesting.plist"];
        libraryContent = [[NSMutableArray alloc] initWithContentsOfFile:path];
        [libraryContent removeObjectAtIndex:0];
        NSLog(@"delete the Row:%@",libraryContent);
        [libraryContent writeToFile:path atomically:YES];

        UITableView *parentTable = (UITableView *)self.superview;
        [parentTable reloadData];
    }
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
 }

 @end

从UITableviewcell重新加载数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我不完全确定您的代码是如何连接的,但通常对于这样的事情,您应该通过将tableview的引用传递给子类的属性来使用委托模式:

subclass *s = [subclass alloc] init];
s.table = self.tableview;

然后当你想引用父表时这样做:

[self.table reloadData];

或使用协议/委托组合,这将是真正的首选方法。像这样:

子类中的

@protocol subclassdelegate <NSObject>
- (void)refreshParentTableView;
@end

在界面

中设置委托
@property (nonatomic,weak) id<subclassdelegate> delegate;

然后在你需要的时候调用它

[self.delegate refreshParentTableView];

现在,在父母中你需要做几件事 调用您的子类并将self设置为委托属性

subclass *s = [subclass alloc] init];
s.delegate = self;

然后在父类中实现协议中定义的方法

- (void)refreshParentTableView {
     [self.tableview reloadData]
}
这两种方法都有效,但我建议您使用协议方法。这是模式代码,但更容易理解,可能更可靠。

好。