在Storyboard中使用viewController类的一个实例

时间:2014-01-30 10:14:21

标签: ios iphone objective-c uiviewcontroller ios7

我正在使用故事板在Xcode 5中编写iOS7应用程序。在应用程序的一部分中,我需要三个共享相同viewController类的屏幕。这些屏幕为UIViewControllers。我根据条件使用UISegmentControl从屏幕到屏幕。如果用户没有完成某些步骤,我禁用了控件。

我使用BOOL值检查是否已完成某些步骤并将其值设置为YES / NO.

问题是当我想回到最后一个屏幕时 - 我得到了一个我的viewController类的新实例。这有两个问题:

  1. 每次用户介于两个视图之间时,内存都会增长
  2. 新实例加载时,BOOL值和所有其他属性为nil。
  3. 在我的分段控件中,这是我访问视图的方式:

    -(void)segmentcontrol:(UISegmentedControl *)segment
    {
    
        if (segment.selectedSegmentIndex == 0)
            {
    
       self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"stepOne"];
            [self presentViewController:self.viewController animated:NO completion:nil];
            }
        else if (segment.selectedSegmentIndex == 1 ){
            self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"stepTwo"];
            [self presentViewController:self.viewController animated:NO completion:nil];
        }else {
        }
    }
    

    这个viewController是我BaseViewController的子类 - 我用于所有屏幕上不变的UI元素。

    当我使用相同的类将段控件更改为另一个视图时,我想要做的是返回viewController类的相同实例。

    这一切都可能吗?

1 个答案:

答案 0 :(得分:2)

不清楚你为什么使用presentViewController:animated:completion:,但看起来你的做法是错误的。

您要做的是创建容器控制器。因此,托管分段控件的视图控制器会创建许多视图控制器实例,并将它们添加为子视图控制器。现在,当选择了段时,您将获得所选索引处的子项,从其超级视图中删除旧视图控制器视图,并将新视图控制器视图添加为子视图。

你不需要这样做,但它可能是最干净的。您的记忆力目前在增长,因为您使用的是instantiateViewControllerWithIdentifier:。您真正需要做的就是保留一组视图控制器并重复使用而不是重新创建。也就是说,不断呈现视图控制器并不明智。