Перемещение между XIB iOS - PullRequest
       18

Перемещение между XIB iOS

0 голосов
/ 25 сентября 2011

У меня есть приложение на основе представления с тремя файлами XIB, каждый со своими контроллерами представления. Как я могу перейти от одного к другому? Я использую это для перехода от xib 1 к xib 2, но когда я использую тот же код для перехода от xib 2 к xib 1, я получаю EXC_BAD_ACCESS в строке [self presentModal ....].

MapView *controller = [[MapView alloc] initWithNibName:@"MapView" bundle:nil];

controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentModalViewController:controller animated:YES];

Как я могу свободно перемещаться с одного киба на другой?

Ответы [ 3 ]

2 голосов
/ 25 сентября 2011

Я думаю, что вы пытаетесь сделать, это представить модальное представление и затем отклонить его, верно?Если это так, то вы помещаете приведенный ниже код в метод, который вы используете для его отклонения (например, - (IBAction) dismissModalView)

[self.parentViewController dismissModalViewControllerAnimated:YES];

Надеюсь, это работаетДайте мне знать.

0 голосов
/ 25 сентября 2011

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

Вместо этого вы можете поменять вид из окна приложения. Вот один из способов сделать это:

Добавление члена данных в делегат приложения для сохранения текущего представления:

@class MyAppDelegate : NSObject <...>
{
    UIViewController* currentVC;
}

и добавьте туда сообщение для обмена VC:

-(void)setCurrentVC:(UIViewController*)newVC
{
    if (newVC==currentVC) return;
    if (currentVC!=nil)
        [currentVC.view removeFromSuperview];
    currentVC = newVC;
    if (newVC!=nil)
        [self.window addSubview:newVC.view];
 }

и переключаться с одного экрана на другой:

MapView* mapView = [[MapView alloc] init];
[[[UIApplication shared] delegate] setCurrentVC:mapView];
0 голосов
/ 25 сентября 2011

initWithNibName на самом деле не требуется ... вы можете изменить это значение на ноль.

Итак, вот правильный код (без анимации):

MapView *mapView = [[MapView alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:mapView animated:NO];

Вы не должны получать EXC_BAD_ACCESS при попытке вернуться к просмотру 1, используя подарок. Если вы не можете решить это, просто используйте это вместо:

[self dismissModalViewControllerAnimated:YES];

Второй контроллер вида исчезнет, ​​и первый контроллер вида снова будет виден.

...