Как программно запустить / избавиться от просмотров для iPhone? - PullRequest
3 голосов
/ 09 апреля 2009

Я не использую панель вкладок или какой-либо другой элемент управления - я хочу в основном изменить текущее представление на другой контроллер представления динамически (то есть с помощью кода). Я вообще не использую Interface Builder ...

Например, допустим, мы создали три контроллера вида:

(это может быть не лучший пример, но я пытаюсь сделать его упрощенным)

View_Hello.m (и .h)

View_Goodbye.m (и .h)

View_Ciao.m (и .h)

Наш ViewerAppDelegate запустит View01_Hello.

View_Hello будет иметь пользовательский метод касания, который затем должен будет перейти к View_Ciao, если он был проведен, но View_Goodbye, если его только коснуться.

Любые идеи о том, как я мог бы сделать это (и, пожалуйста, не говорите «о, вам нужно использовать элемент интерфейса xxx для этого примера». Мне нужно иметь возможность произвольно изменять представления на основе программного управления в представлении приложение, над которым я работаю)

В течение прошлой недели я просматривал Google и StackOverflow, просматривал три книги O'Reilly Cocoa (плюс три книги для разработчиков iPhone), и все они просто используют простые интерфейсы - но ничего не показывает пример как то, что я пытаюсь сделать.

===========

Редактировать (@Andrew Grant):

например:

View_Ciao *viewCiao; 
-(void) viewDidLoad { 
  viewCiao = [[View_Ciao alloc] initWithNibName:@"View_Ciao" bundle:nil];
  [viewCiao.view setNeedsDisplay];
  [super viewDidLoad];
}

Это вылетает. : -)

=============

Edit (@Daniel Dickison)

Бриллиант - это сработало!

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    // create the second view, remove the first, and then display the second

    viewCiao = [[ViewCiao alloc] init];
    [viewController.view removeFromSuperview];   
    [window addSubview:viewCiao.view];
}

Ответы [ 3 ]

2 голосов
/ 10 апреля 2009

Вы уже видели рецепт 2-8 "Смахивание взглядов" в книге Эрика Садуна для разработчиков iPhone ? Она использует touchesBegan и touchesMoved, чтобы определить направление пролистывания, затем устанавливает анимацию на основе направления в touchesEnded.

Вы можете расширить или изменить это, чтобы добавить обнаружение касаний, чтобы определить, к какому виду переходить. Рецепт находится на странице 69 или около нее, если вы хотите посмотреть, в любом случае. Здесь также есть пример видео (mov) и пример кода здесь.

1 голос
/ 10 апреля 2009

Как насчет чего-то вроде:

@interface AppDelegate : ...
{
    View_Hello *hello;
    View_Goodbye *goodbye;
    View_Ciao *ciao;
    UIViewController *currentView;
    UIWindow *window;
}
... IBOutlet properties for the 3 controllers.
@end

@implementation AppDelegate
- (void)switchToGoodbye
{
    [currentView.view removeFromSuperview];
    [window addSubview:goodbye.view];
    currentView = goodbye;
}
... etc.
@end

Вам может потребоваться изменить размер представления перед добавлением его в окно и вызвать viewWillDisappear:, viewDidDisappear:, viewWillAppear: и viewDidAppear: в currentView и новом контроллере представления до и после их удаления / добавления. .

1 голос
/ 10 апреля 2009

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

Если у вас только один уровень просмотра, то ваше окно является родительским.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...