Можете ли вы остановить модальное представление от увольнения? - PullRequest
1 голос
/ 30 ноября 2011

У меня есть представление, которое использует модальное представление с завитком страницы, чтобы разрешить ввод имени пользователя.Это имя пользователя затем проверяется веб-службой, чтобы проверить, действительно ли оно.

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

Есть ли способ получить модал, чтобы не уволить в этом случае?

Я попытался перезагрузить представление, но оно либо не работает, либо UIAlertView блокирует его.Последняя идея, которую я имею, состоит в том, чтобы соединить отображение модального представления с «OK» в предупреждении для неверного имени пользователя.У кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Если вы не используете UINavigationController Вы можете поместить что-то вроде этого в контроллер представления, который вызывает модальное представление:

-(void)dismissModalViewControllerAnimated:(BOOL)animated{
    if (_someFlagForBeingProperlyLoggedIn) [super dismissModalViewControllerAnimated:animated];
}

Когда вы нажимаете на страницу, сверните контроллер представления / родительского представленияотправлено dismissModalViewControllerAnimated:.

Поскольку вы используете контроллер навигации, ваши возможности ограничены.Это связано с тем, что UINavigationController является подклассом UIViewController, и при этом является эгоцентричным.Когда вы щелкаете по странице, она вызывается dismissModalViewControllerAnimated:Иметь UIAlertView «прямой возврат» к модальному представлению входа в систему очень легко.Пусть этот главный вид соответствует протоколу UIAlertViewDelegate.Когда вы отображаете оповещение, установите этот экземпляр в качестве делегата и в этом классе реализует метод:

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    // Enclose in if (buttonIndex == #) for selective calling
    UINavigationController* nav = (UINavigationController*)[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"Preferences"];
    [nav setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [self.navigationController presentModalViewController:nav animated:YES]; 
}

Затем, когда представление оповещения будет отклонено, будет отображено представление «логин».

0 голосов
/ 30 ноября 2011

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

-(void)showModal{
    SomeModalViewClass* modalView = [[SomaModalViewClass alloc]init];
    [self setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [self presentModalViewController:modalView animated:YES];
    [modalView release];
}

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    //check the button index if needed and then
    [self performSelector:@selector(showModal) withObject:nil afterDelay:0.3]; 
}
...