Переключение между 3 или более видами - PullRequest
1 голос
/ 14 июля 2009

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

У меня есть это приложение, у которого есть главное окно с NavigationController, который подается с UITableViewController. Это мое главное меню. У меня есть в правом верхнем углу кнопка «+», которая дает мне новый вид, но как мне получить новый вид отсюда? Как выдвинуть новое представление, когда пользователь выбирает что-то для добавления?

Надеюсь, кто-то понимает мой вопрос. Ссылка на какую-то документацию будет в порядке. Я смотрел везде.

Ответы [ 3 ]

3 голосов
/ 14 июля 2009

Вы можете делать это по-разному, вы можете делать то, что сказал Себастьян, у вас также может быть общий RootViewController, который управляет вашим представлением других контроллеров представления. Это то, что мне нравится делать, я на самом деле определяю протокол на RootViewController что-то вроде ToggleView: UIViewController newController UIViewController: oldController. Я делаю любой UIViewController, который я хочу иметь возможность переключаться с этого представления на другое реализовать этот протокол. Это связано с тем, что, как правило, когда вы нажимаете кнопку, вы знаете, к какому виду вы хотите перейти. Поэтому, когда пользователь нажимает кнопку, в UIViewController, который владеет кнопкой, я создаю новый ViewController, представление которого я хочу выдвинуть на экран, это хорошо, потому что он также позволяет мне устанавливать данные в контроллере представления и не должен делегировать это к некоторому другому объекту или использовать одиночный, чтобы получить данные в новом представлении, тогда я вызываю мои методы toggleView, и контроллер корневого представления выполняет переключение. Я считаю, что это работает довольно хорошо, и есть только любой код. Я не всегда использую это, хотя, если я знаю, что новое представление всегда будет выходить из другого конкретного представления (например, домашней страницы, где каждый просматривает события и создает те события), в этом случае я буду беспрепятственно соединять контроллеры представления используя протоколы.

1 голос
/ 15 июля 2009

Вот определение корневого контроллера-легенда

@ протокол RootViewControllerViewDelegate

- (void) toggleView: (UIViewController ) newController viewController: (UIViewController ) oldController;

@ конец

возможная реализация toggleView

-(void)toggleView:(UIViewController *)newController viewController:(UIViewController*)oldController {   
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:([oldController.view superview] ?  UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];
[newController viewWillAppear:YES];
[oldController viewWillDisappear:YES];
[oldController.view removeFromSuperview];
[self.view addSubview:newController.view];
[oldController viewDidDisappear:YES];
[newController viewDidAppear:YES];
[UIView commitAnimations];
[oldController release];

}

Это проведет контроллеры представления, перевернув представление

Очевидно, что вы должны где-то создать новый RootViewController и начать с представления там (может быть делегатом приложения)

Теперь, если вы хотите, чтобы ViewController мог использовать RootViewController, он должен соответствовать протоколу, вы объявляете его в интерфейсе классов следующим образом:

@interface MyViewController : UIViewController <RootViewControllerDelegate> {
id delegate;
}@property(assign) id <RootViewControllerViewDelegate> delegate;

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

    NewViewController *viewController=...
    //you can set up your viewControllers data here if you need to
   //Since its probable that this view has that data it can just set it instead of
   //delegating 
viewController.delegate=delegate; //setting up the RootViewController reference
[delegate toggleView:viewController viewController:self]; 

запомните при обратном вызове toggleView, чтобы освободить старый ViewController, если вы не получите утечку, поскольку потеряете все ссылки на этот контроллер.

1 голос
/ 14 июля 2009

В этой конкретной ситуации люди обычно используют presentModalViewController:animated: метод UIViewController.UINavigationController является подклассом UIViewController, поэтому ваш код будет выглядеть примерно так:

UIViewController *addingViewController = [[UIViewController alloc] initWithNibName:@"AddingView" bundle:nil];
[[self navigationController] presentModalViewController:addingViewController animated:YES];
[addingViewController release];
...