【问题标题】:How to get an already instantiated UIViewController?如何获取已经实例化的 UIViewController?
【发布时间】:2013-04-21 00:28:05
【问题描述】:

我是 iOS 编程新手,我正在使用 ECSlidingViewController 创建滑出式菜单(如 Facebook)。所以想象一下,如果我的菜单中引用了两个视图。

当我打开应用程序时,它显然会调用viewDidLoad 作为我的顶视图(我菜单中的第一个视图)。如果我打开菜单并选择第二个视图,它也会为此调用viewDidLoad。但是,如果我回到第一个视图,它将再次调用该方法,这是我不想要的。我有一些设置代码,如果可能的话,我不想重新实例化视图。我见过 Facebook,他们不会恢复视图,因为它会记住我在 Wall 上的滚动位置,例如,当我切换视图并返回时。

这是我在选择时触发的委托方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Get identifier from selected
    NSString *identifier = [NSString stringWithFormat:@"%@", [self.menu objectAtIndex:indexPath.row]];

    // Add the selected view to the top view
    UIViewController *newTopVC = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

    // Present it 
    [self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
        CGRect frame = self.slidingViewController.topViewController.view.frame;
        self.slidingViewController.topViewController = newTopVC;
        self.slidingViewController.topViewController.view.frame = frame;
        [self.slidingViewController resetTopView];
    }];
} 

如果某个 VC 已经创建,有没有办法以某种方式获得它?这样,它只会调用viewWillAppear,而不是多次调用viewDidLoad

谢谢。

【问题讨论】:

  • 是的,当你第一次创建它时为其创建一个强属性,然后使用该属性而不是在下次需要时实例化一个新属性。
  • @rdelmar 那会是UIViewControllers 的数组吗,因为我有多个视图?

标签: ios objective-c uiviewcontroller storyboard


【解决方案1】:

可以使用导航控制器。当你想进入第二个视图时,你可以将视图控制器推送到导航视图控制器上,当你返回时,你可以将它从导航控制器中弹出。

编辑:

如果你有 3 个视图,你仍然可以使用 navigationcontroller。与上述相同的逻辑。但请记住在导航控制器中删除同一视图控制器的双重实例。看看这个页面:How to remove a specific view controller from uinavigationcontroller stack?。检查特定的viewcontroller是否存在,如果存在,删除然后push到上面。

【讨论】:

  • 但是如果我有超过 2 个视图怎么办?我不知道这是否会奏效。例如,如果我有 3 个视图。我加载1,然后去3,然后想去2。之后,我想再去1。这将如何解决?
  • 这个 NavigationController 是在代码中作为某种堆栈创建的吗?我知道有一个 UINavigationController,但我的逻辑是真的只保存和加载视图状态,而不是 segues 和所有这些东西,因为我的菜单实现了导航功能。
  • 哦,如果有帮助,我正在使用带有 ios 6.0 的故事板来执行此操作。我基本上有一个 InitViewController、一个 MenuViewController(这是一个带有 UITableView 和 UITableViewCell 的 UIVC),然后是 2 个 UIViewController。它们没有与导航控制器链接,当在菜单中选择相应的 VC 时,我只是实例化最后两个中的每一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2016-03-22
  • 1970-01-01
相关资源
最近更新 更多