【问题标题】:Dismiss ModalView that was presented by tableViewController? [closed]关闭由 tableViewController 呈现的 ModalView? [关闭]
【发布时间】:2013-08-29 07:36:14
【问题描述】:

在我的项目中,应用在 ViewController 中启动,通过将其添加为子视图(ViewController.h - [self.view addSubview: Table.tableView];)加载到表(表类)中

Camera Class 是详细视图,因此当您点击表格行时,它会加载 Camara.xib。直到这里一切正常。

当我尝试关闭 Camera.xib 并返回 ViewController.xib 时,问题就来了仅加载 Table.xib,因此放置在 ViewController.xib 视图中的其余对象不显示。

我做错了什么?

提前致谢!!

代码:

表格.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.

}

【问题讨论】:

  • 请出示一些代码。
  • 请显示更多代码@yeker3
  • 告诉我你想要什么代码,因为这个项目不公开,所以我无法上传洞代码,不便之处敬请原谅! @Pétur
  • @yeker3 ViewController.m 的初始化器和 viewDidLoad 和 viewWillAppear。看到 Table.m 的 viewWillAppear 也很好
  • @Pétur 我添加了它,但我没有在这个文件中使用 viewWillAppear!

标签: iphone objective-c arrays ios5 xcode4


【解决方案1】:

没有看到您正在使用的代码,我无法完全回答,但我猜您需要 viewWillAppear 中的某些内容来重新加载您的表格或表格 xib。每次关闭您的模式时都会调用 viewWillAppear。

另一种选择是创建一个委托协议,以允许您的模态控制器调用初始视图控制器上的方法。

这是一篇不错的文章开头:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

【讨论】:

    【解决方案2】:

    首先我必须声明,您的问题已被否决,很可能是因为它的英文写得不好,而且最初缺少解决方案所需的必要信息。

    接下来,我想强调的是,[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);
    }
    

    【讨论】:

    • 首先,我不知道这是剑桥英语考试(对不起,先生,我试图说一些不是我的第一语言的东西......)。感谢您的回答,但对我不起作用我仍然遇到同样的问题@Pétur
    【解决方案3】:

    问题是 tableViewController 和 ViewController 在两个视图控制器中,所以我将它们组合起来,现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多