解除tableViewController提供的ModalView?

时间:2013-08-26 18:21:03

标签: iphone objective-c arrays ios5 xcode4

File Organization

在我的项目中,应用程序在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.

}

3 个答案:

答案 0 :(得分:1)

没有看到你正在使用的代码我无法完全回答,但我的猜测是你需要在viewWillAppear中重新加载你的表或表xib。每次你的模态被解雇时都会调用viewWillAppear。

另一个选项是创建委派协议,以允许模态控制器在初始视图控制器上调用方法。

这是一篇很好的文章:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

答案 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在两个视图控制器中,所以我将它们组合起来,现在一切正常。