我在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重新加载数据的最佳方法是什么?
答案 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]
}
这两种方法都有效,但我建议您使用协议方法。这是模式代码,但更容易理解,可能更可靠。
好。