目标C:在viewDidAppear中触发IBAction showInfo

时间:2011-09-09 19:15:30

标签: objective-c ios xcode viewdidload viewdidappear

我使用Xcode 4中的Utility Application模板创建了我的应用程序。

我希望我的应用在首次启动时显示反面,以便用户可以输入网址。

在我的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];
}

“没有url,flip”被记录,并且调用了showInfo方法,但它没有翻转。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

只需在代码中编辑一行。

- (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");
    }
}

答案 1 :(得分:0)

我认为你的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(在此示例中)中,为了保持一致,有类似的代码可以翻转所有内容。