我有一个包含许多视图和一个表格视图的视图控制器。
tableview 的单元格是自定义的,因此还有另一个类用于设置单元格。每个单元格中都有一个按钮。此按钮的图像根据单元格的内容而变化(此内容从数据库中读取)。
基本上,当用户按下按钮时,它会将自身更改为另一个图像,将新状态写入 DB,但 tableview 不会自动更新。
按钮的方法在自定义单元格类中,所以我尝试实例化我的视图控制器(带有 tableview 的那个)并执行一种方法来更新视图和 tableview 中的一些标签:
ViewControllerWithTable *vc = [[ViewControllerWithTable alloc] init];
[vc updateEverything];
但这不起作用。从相同的“ViewControllerWithTable”(添加重新加载按钮)调用的相同“updateEverything”方法完美运行。在 viewWillAppear 方法中添加“[tableView reloadData]”将不起作用,因为所有操作都在同一个视图中完成。
我错过了什么?
编辑:添加一些代码更清楚。
这是我用来更新表格视图的方法。它位于带有嵌入式 tableview 的 ViewController 内,当由其中一个视图中的按钮触发时,它可以工作:
- (void) updateEverything {
// lots of DB writing and reading, plus label text changing inside all the views
[tableView reloadData];
}
这是按钮按下的 IBAction,它位于自定义单元格类中:
-(void) btnPresaPressed:(UIButton *)sender {
AppDelegate *deleg = (AppDelegate *)[[UIApplication sharedApplication] delegate];
deleg.did = sender.tag;
NSString *s1 = NSLocalizedString(@"ALERT_TITLE", nil);
NSString *s2 = NSLocalizedString(@"ALERT_BODY", nil);
NSString *s3 = NSLocalizedString(@"YES", nil);
NSString *s4 = NSLocalizedString(@"NO", nil);
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:s1
message:s2
delegate:self
cancelButtonTitle:s4
otherButtonTitles:s3, nil];
[alertView setTag:1];
[alertView show];
}
此方法显示一个调用另一个方法的警报视图,始终在自定义单元格类中:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
AppDelegate *deleg = (AppDelegate *)[[UIApplication sharedApplication] delegate];
DbOperations *db = [[DbOperations alloc] init];
NSString *alrtTitle = [alertView buttonTitleAtIndex:buttonIndex];
NSString *s3 = NSLocalizedString(@"YES", nil);
NSString *s4 = NSLocalizedString(@"NO", nil);
switch (alertView.tag) {
case 1:
//
break;
case 2:
if ([alrtTitle isEqualToString:s3]) {
// DB writing and reading
ViewControllerWithTable *vc = [[ViewControllerWithTable alloc] init];
[vc updateEverything];
} else if ([alrtTitle isEqualToString:s4]){
//
}
break;
case 3:
if ([alrtTitle isEqualToString:s3]) {
//
}
break;
default:
break;
}
}
在这种情况下,updateEverything 方法不起作用。