0

我的 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 重新加载数据的最佳方法是什么?

4

1 回答 1

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

两种方法都有效,但我建议您使用协议方法。它是模式代码,但更容易理解并且可能更可靠。

好起来。

于 2012-08-15T05:40:42.870 回答