Цель C: запуск IBAction showInfo в viewDidAppear - PullRequest
0 голосов
/ 09 сентября 2011

Я создал свое приложение, используя шаблон приложения-утилиты в Xcode 4.

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

В моем mainViewController у меня есть:

- (void)viewDidAppear:(BOOL)animated
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if(![defaults stringForKey:@"url"]){
        // Flip to the back page
        [self showInfo: self];

        NSLog(@"No url, flip");
    }else{
        NSLog(@"dont flip");
    }
}

- (IBAction)showInfo:(id)sender
{
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    controller.delegate = self;

    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];

    [controller release];
}

«No url, flip» регистрируется, и вызывается метод showInfo, но он не переворачивается. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

просто отредактируйте одну строку в вашем коде.

- (void)viewDidAppear:(BOOL)animated
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if(![defaults stringForKey:@"url"]){
        // Flip to the back page
        [self performSelector:@selector(showInfo:) withObject:self afterDelay:0.1];

        NSLog(@"No url, flip");
    }else{
        NSLog(@"dont flip");
    }
}
0 голосов
/ 09 сентября 2011

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

    PersonDetailViewController *pvc = [[PersonDetailViewController alloc]
                             initWithNibName:@"PersonDetailView" bundle:nil];

    UIView *container = self.parentViewController.tabBarController.view;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
                           forView:container cache:YES];
    [container addSubview:pvc.view];
    [pvc viewWillAppear:YES];
    [self viewWillDisappear:YES];
    [UIView commitAnimations];

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

Так, что это делает? Код добавляет новое представление контроллера представления (pvc.view) как подпредставление «контейнера». В этом приложении представление «контейнер» - это представление, которое переворачивается, когда новое представление (pvc.view) переворачивается.

Также важно называть как новое представление viewWillAppear:, так и старое представление viewWillDisapear:, чтобы все правильные вещи, которые вы ожидаете, произойдут, когда представления приходят и уходят, происходят. [Этот рецепт может считаться "старой школой" некоторыми. В дни iPhone OS 2.x (тогда это еще не называлось iOS), шаблон Utility имел код, подобный этому, вызывая viewWillAppear и viewWillDisappear и т. Д. Он все еще работает сегодня, fwiw. И код, показанный здесь, находится в приложении доставки в магазине приложений, так что он все еще кошерный, так сказать. :-)]

Стоит отметить, что в PersonDetailViewController (в этом примере) есть аналогичный код, который переворачивает все обратно для согласованности.

...