2013-04-26 3 views
0

Я новичок в программировании на iOS, и я использую ECSlidingViewController для создания слайд-меню (например, Facebook). Итак, представьте, если у меня есть два представления, упомянутые в моем меню.Как получить уже созданный UIViewController?

Когда я открою приложение, он, очевидно, вызовет viewDidLoad для моего вида сверху (первый в моем меню). Если я открою меню и выберем второй вид, он также вызовет viewDidLoad. Однако, если я вернусь к первому виду, он снова вызовет этот метод, чего я не хочу. У меня есть некоторый код установки, и я не хочу, если возможно, обновлять представления. Я видел Facebook, и они не восстанавливают представления, потому что он помнит мою прокручивающуюся позицию на моей Стене, например, когда я переключил взгляды и вернулся.

Это мой метод делегата, который вызывает при выборе:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Get identifier from selected 
    NSString *identifier = [NSString stringWithFormat:@"%@", [self.menu objectAtIndex:indexPath.row]]; 

    // Add the selected view to the top view 
    UIViewController *newTopVC = [self.storyboard instantiateViewControllerWithIdentifier:identifier]; 

    // Present it 
    [self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{ 
     CGRect frame = self.slidingViewController.topViewController.view.frame; 
     self.slidingViewController.topViewController = newTopVC; 
     self.slidingViewController.topViewController.view.frame = frame; 
     [self.slidingViewController resetTopView]; 
    }]; 
} 

Есть ли способ, чтобы каким-то образом получить определенную VC, если он уже создан? Таким образом, он будет звонить только viewWillAppear, а не viewDidLoad не один раз.

спасибо.

+2

Да, создайте для него сильное свойство, когда вы его сначала создадите, а затем используйте это свойство, а не создавайте новый, в следующий раз, когда оно вам понадобится. – rdelmar

+0

@rdelmar Итак, это будет массив 'UIViewController', потому что у меня несколько видов? – swiftcode

ответ

1

Может использовать навигационный контроллер. Когда вы хотите перейти ко второму представлению, вы можете нажать его viewcontroller на контроллер навигации и, когда вы вернетесь, вы можете вытащить его с навигационного контроллера.

EDIT:

Если у вас есть 3 вида, вы все еще можете использовать navigationcontroller. Та же логика, что и выше. Но не забудьте удалить двойные экземпляры одного и того же диспетчера представлений в навигационном контроллере. Посмотрите на эту страницу: How to remove a specific view controller from uinavigationcontroller stack?. Проверьте, существует ли конкретный диспетчер представлений, если да, удалите и затем нажмите его сверху.

+0

Но что делать, если у меня есть более 2 просмотров? Я не знаю, будет ли это работать. Например, если у меня есть 3 представления. Я загружаю 1, затем переходим к 3, затем хочу перейти к 2. После этого я хочу снова перейти к 1. Как это получится? – swiftcode

+0

см. Отредактированный .. надеюсь, что это помогает ... – lakesh

+0

Является ли этот NavigationController созданным в коде как своего рода стек? Я знаю, что есть UINavigationController, но моя логика заключается в том, чтобы действительно сохранять и загружать состояния состояний, а не segues и все такое, потому что мое меню реализует навигационную способность. – swiftcode

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