2015-09-06 2 views
1

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

Вот мой код:

 let newController = storyboard?.instantiateViewControllerWithIdentifier(viewControllerIdentifiers[sender.selectedSegmentIndex]) as! userProfileViewController 
     let oldController = childViewControllers.last as! UIViewController 

     newController.userToShow = self.userToShow 

     oldController.willMoveToParentViewController(nil) 
     addChildViewController(newController) 
     newController.view.frame = oldController.view.frame 


     transitionFromViewController(oldController, toViewController: newController, duration: 0.25, options: .TransitionCrossDissolve, animations:{() -> Void in 
      // nothing needed here 



      }, completion: { (finished) -> Void in 

       oldController.removeFromParentViewController() 

       newController.didMoveToParentViewController(self) 



     }) 

    } else if sender.selectedSegmentIndex == 1 { 


     let newController = storyboard?.instantiateViewControllerWithIdentifier(viewControllerIdentifiers[sender.selectedSegmentIndex]) as! secondProfilePageViewController 
     let oldController = childViewControllers.last as! UIViewController 

     newController.userToShow = self.userToShow 

     oldController.willMoveToParentViewController(nil) 
     addChildViewController(newController) 
     newController.view.frame = oldController.view.frame 



     transitionFromViewController(oldController, toViewController: newController, duration: 0.25, options: .TransitionCrossDissolve, animations:{() -> Void in 
      // nothing needed here 

      }, completion: { (finished) -> Void in 
       oldController.removeFromParentViewController() 

       newController.didMoveToParentViewController(self) 

     }) 
    } 

} 

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

Чтобы лучше понять, я хотел бы сделать что-то вроде материалов Today/Notifications в каждом Iphone.

ответ

2

Вам интересно, почему контроллеры просмотра перезагружаются при переключении. Причина в том, что вы звоните instantiateViewController..., который, ну, создает новый контроллер .

Вместо этого, у контроллера контейнера есть два вида контейнера и сохраняйте ссылки на эти контроллеры (как переменные) в этом контроллере контейнера.

+0

Но как я могу анимировать проход, а не скрывать мнение, которое мне не нужно? – dpstart

+0

Я думал, что проблема в том, что вы всегда получаете новое представление, а не то, что он не оживляет. – Mundi

+0

@dpstart, вы уже используете контроллер вида контейнера, как он упомянул, это VC, который запускает ваш код анимации. Вам просто нужно хранить ссылки на два VC, которые вы хотите поменять на этом VC. Я бы создал два VC в вашем viewDidLoad и просто отслеживал, какой из них видим. Строка вашего экземпляра буквально создает новый VC, поэтому вам нужно использовать его только один раз за VC, который вы хотите обменять. –

Смежные вопросы