在我的项目中,应用程序在ViewController中启动,它通过将其添加为子视图(ViewController.h - [self.view addSubview:Table.tableView];)来加载表(Table类);
Camera Class是详细视图,因此当您点击表格行时,它会加载Camara.xib。直到这里一切正常。
当我尝试解除Camera.xib并返回ViewController.xib时出现问题,当我这样做时,Camera.xib解散没问题,但不是回到ViewController.xib,里面有Table.xib,应用程序只加载Table.xib,因此放置在ViewController.xib视图中的其余对象不会显示。
我做错了什么?
提前致谢!!
CODE:
Table.m
- (void)viewDidLoad
{
roomsArray = [[NSMutableArray alloc] initWithObjects:nil];
[super viewDidLoad];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// my code...
Camara *camara = [[Camara alloc] initWithNibName:@"Camara" bundle:nil];
[self presentViewController:camara animated:YES completion:nil];
}
Camara.m
-(IBAction)cancel:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
ViewController.m
- (void)viewDidLoad
{
table = [[Table alloc] initWithNibName:@"Table" bundle:nil];
[windows.tableView reloadData];
[self.view addSubview:windows.tableView];
windows.tableView.transform = CGAffineTransformMakeTranslation(0, 44);
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
答案 0 :(得分:1)
没有看到你正在使用的代码我无法完全回答,但我的猜测是你需要在viewWillAppear中重新加载你的表或表xib。每次你的模态被解雇时都会调用viewWillAppear。
另一个选项是创建委派协议,以允许模态控制器在初始视图控制器上调用方法。
答案 1 :(得分:0)
首先,我必须说明你的问题已经收到了支持,很可能是因为它用英语写得不好,而且最初缺乏解决方案所需的必要信息。
接下来,我想强调一下,[super viewDidLoad]
之类的超级调用应始终出现在任何代码逻辑之前。将它们移动到每个方法的顶部。
现在您遇到问题的原因。
每当在内存中创建一个视图控制器时,它将执行其viewDidLoad方法,然后在它出现之前执行viewWillAppear方法(在其父项上,除非你重载它),执行只在视图生命周期中发生一次。将来尝试显示视图将导致调用viewWillAppear。
<强>解决方案强> 移动以下代码
[windows.tableView reloadData];
[self.view addSubview:windows.tableView];
windows.tableView.transform = CGAffineTransformMakeTranslation(0, 44);
到
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[windows.tableView reloadData];
[self.view addSubview:windows.tableView];
windows.tableView.transform = CGAffineTransformMakeTranslation(0, 44);
}
答案 2 :(得分:0)
问题是tableViewController和ViewController在两个视图控制器中,所以我将它们组合起来,现在一切正常。