2012-01-13 4 views
0

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

incidencias =[[MisIncidencias alloc] 
       initWithNibName:@"MisIncidencias" 
       bundle:nil]; 

[self.view addSubview:incidencias.view]; 

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

[self.view removeFromSuperview]; 

либо до, либо после того, как [self.view addSubview:incidencias.view], я просто попадаю на главный экран;

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

Я нашел другое решение, чтобы добавить обе точки зрения один за другим, но это не очень хорошо работает:

incidencias=[[MisIncidencias alloc] 
        initWithNibName:@"MisIncidencias" 
        bundle:nil 
        ]; 

    [self.view addSubview:incidencias.view]; 

    login=[[LoginViewController alloc] 
        initWithNibName:@"LoginViewController" 
        bundle:nil]; 
    [self.view addSubview:login.view]; 

это не работает хорошо, потому что incidencias начинается и не ждать для входа в Конец.

благодаря

EDIT: благодаря Веон я изменил мой код добавления протокола: LoginViewControllerDelegate и этот метод внутри ViewController:

- (void)loginSucceededFromController:(LoginViewController*)viewController { 
[viewController.view removeFromSuperview]; 

incidencias =[[MisIncidencias alloc] 
       initWithNibName:@"MisIncidencias" 
       bundle:nil]; 

[self.view addSubview:incidencias.view]; 
} 

в LoginViewController У меня есть

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex: (NSInteger)buttonIndex{ 

if(self.delegate) 
    [self.delegate loginSucceededFromController:self] 

} получает ошибку: Semantic I ssue: Свойство 'delegate' не найдено на объекте типа 'LoginViewController *'

Если логин успешно, пользователь видит предупреждение, и после того, как он нажимает на ok, это когда вызывается метод выше.

Что еще я должен добавить? Я начинаю с Iphone, и я не очень хорошо понимаю, что делегат (я из Явы)

+0

см. Мой ответ на ваш ответ fmi ... – beOn

ответ

1

А, ладно, это не так уж плохо. Вот первое решение, которое приходит на ум:

Шаг 1. Создайте делегатский протокол для входа в систему.

@protocol LoginViewControllerDelegate <NSObject> 
@required 
- (void)loginSucceededFromController:(LoginViewController*)viewController; 
@end 

Шаг 2. Реализация протокола в главном контроллере представления

- (void)loginSucceededFromController:(LoginViewController*)viewController { 
// TODO: we'll put something here in a second 
} 

Шаг 3.Вызвать метод делегата от вашей точки зрения входа на успешной регистрации

if (loginSuccess && self.delegate) { 
    [self.delegate loginSucceededFromController:self] 
} 

Шаг 4. Уволить вид входа в систему и представить новый вид из главного контроллера представления, используя код, который вы уже имеете:

- (void)loginSucceededFromController:(LoginViewController*)viewController { 
    [viewController.view removeFromSuperview]; 

    incidencias =[[MisIncidencias alloc] 
        initWithNibName:@"MisIncidencias" 
        bundle:nil]; 

    [self.view addSubview:incidencias.view]; 
} 

Надеемся это что-то очищает. Причина, по которой у вас возникли проблемы, заключается в том, что вы добавляли под просмотр к представлению, затем сразу же удаляли представление или удаляли представление, а затем добавляли к нему подзаголовок. В приведенном выше коде вы вызываете делегата диспетчера представления, а делегат, которому принадлежит супервизор представления, сначала удаляет представление, а затем добавляет newView (из-за отсутствия лучшего термина) в супервизор. Поскольку супервизор никогда не удалялся, он может показать ваш новый вид.

+0

beOn благодарит много за ваш anser, но я не могу заставить его работать. Я читал о протоколах, но я не могу найти, что еще не хватает. Я обновил свой вопрос выше, чтобы exaplain, где я получаю ошибки. – vallllll

+0

См. Мой ответ на этот вопрос для получения инструкций о том, как настроить и использовать свойство делегата. Вопрос в том, что-то другое, но описанная настройка решит вашу проблему: http://stackoverflow.com/a/8851420/152236 – beOn

+0

Единственное, о чем я не говорю, это то, что вы должны сами установить свойство делегата , Итак, с вашего основного контроллера, вы бы сделали: login.delegate = self. Таким образом, login viewController знает, какой объект является его делегатом, поэтому он знает, куда отправить сообщение. Вы получили эту ошибку, потому что LoginViewController.h не определяет свойство, называемое делегатом. – beOn

0

Вы должны принять BOOL, который можно получить доступ через вне приложения, как глобальный

как extern BOOL login; Теперь, когда вы войти в систему установлен на YES. теперь проверяйте, когда

if(login == YES){ 

incidencias=[[MisIncidencias alloc] 
        initWithNibName:@"MisIncidencias" 
        bundle:nil 
        ]; 

    [self.view addSubview:incidencias.view]; 

} 
else{ 
login=[[LoginViewController alloc] 
        initWithNibName:@"LoginViewController" 
        bundle:nil]; 
    [self.view addSubview:login.view]; 
} 
+0

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

0

Если вы хотите что-то работает сразу, и вы используете UINavigationController ... то и может возможно использовать

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 

просто получить изменяемую копию массива self.navigationController.viewcontrollers, выскочить последний элемент, который будет экраном входа и нажмите на новый экран, где вы планируете переместить экран b .. и передать массив этой функции .. и теперь вы в безопасности!

+0

Не похоже, что здесь используется UINavigationController, но да, если бы это было так, это было бы способом. – beOn

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