簡體   English   中英

在Storyboard中使用viewController類的一個實例

[英]Using one instance of a viewController class in Storyboard

我正在使用故事板在Xcode 5中編寫iOS7應用程序。 在應用程序的一部分中,我需要三個共享相同viewController類的屏幕。 這些屏幕是UIViewControllers 我根據條件使用UISegmentControl從一個屏幕到另一個屏幕。 如果用戶沒有完成某些步驟,我禁用了控件。

我使用BOOL值檢查是否已完成某些步驟並將其值設置為YES / NO.

問題是當我想回到最后一個屏幕時 - 我得到了一個我的viewController類的新實例。 這有兩個問題:

  1. 每次用戶進入兩個視圖之間時,內存都會增長
  2. 新實例加載時,BOOL值和所有其他屬性為nil。

在我的段控件中,這是我訪問視圖的方式:

-(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類的相同實例。

這是可能嗎?

不清楚你為什么使用presentViewController:animated:completion:但看起來你的做法是錯誤的。

你想要做的是創建一個容器控制器。 因此,托管分段控件的視圖控制器會創建許多視圖控制器實例,並將它們添加為子視圖控制器。 現在,當選擇了段時,您將獲得所選索引處的子項,從其超級視圖中刪除舊的視圖控制器視圖,並將新的視圖控制器視圖添加為子視圖。

你不需要這樣做,但它可能是最干凈的。 你的內存目前增長是因為你使用了instantiateViewControllerWithIdentifier: . 您真正需要做的就是保留一組視圖控制器並重復使用而不是重新創建。 也就是說,不斷呈現視圖控制器並不明智。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM