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

标签 ios iphone objective-c uiviewcontroller ios7

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

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

问题是当我想返回到最后一个屏幕时 - 我正在获取我的 viewController 类的一个新实例。这有两个问题:

  1. 每次用户在两个 View 之间切换时,内存都会增加
  2. BOOL 值和所有其他属性在新实例加载时为零。

在我的段控制中,这是我获取 View 的方式:

-(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 元素。

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

这有可能吗?

最佳答案

不清楚您为什么要使用 presentViewController:animated:completion:,但看起来您做事的方式不对。

您想要做的是创建一个容器 Controller 。因此,托管分段控件的 View Controller 创建了许多 View Controller 实例并将它们添加为 subview Controller 。现在,当选择段时,您会在所选索引处获得 subview ,从其父 View 中删除旧的 View Controller View ,并将新的 View Controller View 添加为 subview 。

你不需要那样做,但它可能是最干净的。您的内存目前增长是因为您使用了 instantiateViewControllerWithIdentifier:。您真正需要做的就是保留一组 View Controller 并重用而不是重新创建。也就是说,不断呈现 View Controller 是不明智的。

关于ios - 在 Storyboard 中使用 viewController 类的一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21453513/

相关文章:

ios - App Store 发布时必须增加哪个 iOS 应用程序版本/内部版本号?

ios - 如何在 iOS 应用程序中打开系统的 iPhone 拨号盘

ios - 在 Firebase 中更改值后删除观察者

iphone - 分段线仅在iPhone上绘制第一段。在模拟器中完美工作

objective-c - iOS中心底部位置 View

ios - 进度开始后是否可以动态扩展 NSProgress 层次结构?

iphone - 为未推送的 View 设置动画

php - EasyAPNS 无法连接到数据库

objective-c - 与玩家一起移动 NSView 边界的更好方法?

objective-c - 如何在 Mac OS 10.6+ 中使用 obj-c 切换到登录窗口