Основы переключения iPhone View - PullRequest
1 голос
/ 26 марта 2010

Я просто пытаюсь разобраться с простым переключением вида для iPhone и создал простое приложение, которое поможет мне понять его.

Я включил код моего корневого контроллера, используемый для переключения представлений. Мое приложение имеет одну панель инструментов с тремя кнопками, каждая из которых связана с одним представлением. Вот мой код для этого, но я думаю, что наиболее эффективный способ достичь этого? Есть ли способ узнать / удалить текущий отображаемый вид вместо необходимости делать операторы if, чтобы увидеть, есть ли у суперкласса?

Я знаю, что мог бы использовать панель вкладок для создания подобного эффекта, но я просто использую этот метод, чтобы помочь мне практиковать некоторые из техник.

-(IBAction)switchToDataInput:(id)sender{
 if (self.dataInputVC.view.superview == nil) {
  if (dataInputVC == nil) {
   dataInputVC = [[DataInputViewController alloc] initWithNibName:@"DataInput" bundle:nil];
  }
  if (self.UIElementsVC.view.superview != nil) {
   [UIElementsVC.view removeFromSuperview];
  } else if (self.totalsVC.view.superview != nil) {
   [totalsVC.view removeFromSuperview];
  }

  [self.view insertSubview:dataInputVC.view atIndex:0];
 }
}

-(IBAction)switchToUIElements:(id)sender{
 if (self.UIElementsVC.view.superview == nil) {
  if (UIElementsVC == nil) {
   UIElementsVC = [[UIElementsViewController alloc] initWithNibName:@"UIElements" bundle:nil];
  }
  if (self.dataInputVC.view.superview != nil) {
   [dataInputVC.view removeFromSuperview];
  } else if (self.totalsVC.view.superview != nil) {
   [totalsVC.view removeFromSuperview];
  }

  [self.view insertSubview:UIElementsVC.view atIndex:0];
 }

}

-(IBAction)switchToTotals:(id)sender{
 if (self.totalsVC.view.superview == nil) {
  if (totalsVC == nil) {
   totalsVC = [[TotalsViewController alloc] initWithNibName:@"Totals" bundle:nil];
  }
  if (self.dataInputVC.view.superview != nil) {
   [dataInputVC.view removeFromSuperview];
  } else if (self.UIElementsVC.view.superview != nil) {
   [UIElementsVC.view removeFromSuperview];
  }

  [self.view insertSubview:totalsVC.view atIndex:0];
 }
}

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Не изобретай заново UITabBarController. Открутите панель инструментов и замените ее панелью вкладок, и тогда все это поведение будет встроено для вас. Это должно быть намного проще! Дайте мне знать, как это получается.

1 голос
/ 26 марта 2010

Я бы рекомендовал не пересоздавать каждый вид каждый раз, когда вы хотите отобразить его, а просто выводить правильное подпредставление вперед, когда это необходимо. Что-то вроде:

-(void)init{
  // The 3 view controllers below are ivars, so we can access in other methods 
  dataInputVC = [[DataInputViewController alloc] initWithNibName:@"DataInput" bundle:nil];   
  UIElementsVC = [[UIElementsViewController alloc] initWithNibName:@"UIElements" bundle:nil];
  totalsVC = [[TotalsViewController alloc] initWithNibName:@"Totals" bundle:nil];

  // Add as subviews (rearrange so that correct view appears first)
  [self.view addSubview:dataInputVC.view];
  [self.view addSubview:UIElementsVC.view];
  [self.view addSubview:totalsVC.view];
}

-(IBAction)switchToDataInput:(id)sender{
  [self.view bringSubviewToFront:dataInputVC.view];
}

-(IBAction)switchToUIElements:(id)sender{
  [self.view bringSubviewToFront:UIElementsVC.view];
}

-(IBAction)switchToTotals:(id)sender{
  [self.view bringSubviewToFront:totalsVC.view];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...