Как настроить пользовательский UIViewController после общего UIViewController? - PullRequest
1 голос
/ 12 января 2011

(окончательное решение внизу)

Я пытаюсь настроить приложение для iPad, которое будет иметь начальный вид входа в систему.Когда пользователь щелкает действие, оно должно перенаправляться на домашний вид.Первоначально я настраивал UIViewController для обработки представления входа в систему.Оттуда я хотел отобразить следующую группу представлений, используя пользовательский контроллер представления.

Я создаю LoginViewController, который обрабатывает loginView, добавляя этот вид в окно из AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    loginViewController = [[LoginViewController alloc] init];
    [self.window addSubview:loginViewController.loginView];
    [self.window makeKeyAndVisible];

    return YES;
}

И интерфейс для моего LoginViewController выглядит следующим образом:

@interface LoginViewController : UIViewController {
    UIView *loginView;
    UITextField *usernameTextField;
    UITextField *passwordTextField;
    UIButton *submitButton;
}
@property (nonatomic, retain) IBOutlet UIView *loginView;
@property (nonatomic, retain) IBOutlet UITextField *usernameTextField;
@property (nonatomic, retain) IBOutlet UITextField *passwordTextField;
-(IBAction)submit;
-(void)setupTextFields;
@end

То, что я пытался сделать, это добавить HomeViewController, который расширил бы класс UIViewController, внутри моего LoginViewController, чтобы при нажатии кнопки действия внутри моего loginView он загружал новый пользовательский контроллер представления.

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

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

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


Следуя решению, предложенному @Jonah, я переключил homeViewController на тот, который создан в AppDelegate, и назвал displayLoginModalViewController следующим образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    homeViewController = [[HomeViewController alloc] init];
    [homeViewController displayLoginModalViewController];
    [self.window addSubview:homeViewController.homeView];
    [self.window makeKeyAndVisible];

    return YES;
}

Реализация моего displayLoginModalViewController выглядит следующим образом:

-(void)displayLoginModalViewController{
    LoginViewController *loginViewController = [[LoginViewController alloc] init];
    loginViewController.modalPresentationStyle = UIModalPresentationFullScreen;
    loginViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:loginViewController animated:YES];
}

Я пытался вызвать метод displayLoginModalViewController до и после добавления homeView в окно, и оно не рендеритсямодальный вид.Я чувствую, что здесь чего-то не хватает.Метод отображает модальное представление, когда действие выхода из системы нажимается из homeView, но не при запуске приложения.

Я также поместил NSLog s после добавления подпредставления в didFinishLaunchingWithOptions: и послеpresentModalViewController: в методе displayLoginModalViewController.Обе NSLog отображаются в моей консоли, я просто не знаю, почему она не отображает модальное представление.

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

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

Когда дело доходит до модальных представлений, очевидно, они требуют взаимодействия с пользователем.Это означает, что они могут быть представлены только после действий, выполненных пользователем.Когда я впервые захотел настроить вход в систему в качестве модального вида и сохранить мой домашний вид в качестве основного, просто не было возможности отображать модальный вид при запуске.Это потребовало действия.

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

Ответы [ 2 ]

3 голосов
/ 12 января 2011

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

Он заботится о структуре нажатия viewControllers друг на друга, памяти, отображения и т. Д. Альтернативой является то, что UINavigationController делает вручную. Это может привести к тому, что ваш viewController будет иметь переменную для хранения следующего viewController, а затем добавит второе представление viewControllers к первому viewController ... (это много работы, поэтому постарайтесь не использовать этот подход в качестве основы)

Это необходимо прочитать. Я просматриваю различные контейнеры viewController и когда их использовать - это то, что вам нужно, прежде чем все станет действительно сложным. Руководство по программированию ViewController

1 голос
/ 13 января 2011

Представления входа в систему естественным образом подходят для модальных контроллеров представления.Взгляните на -presentModalViewController UIViewController: как механизм для представления вашего контроллера представления входа "поверх" того, что другой контроллер представления в настоящее время заполнял ваше окно.

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