【问题标题】:Objective C: Triggering IBAction showInfo in viewDidAppear目标 C:在 viewDidAppear 中触发 IBAction showInfo
【发布时间】:2011-09-09 19:15:29
【问题描述】:

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

我希望我的应用在首次启动时显示反面,以便用户可以输入 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];
}

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

【问题讨论】:

  • 在 showInfo 函数中发布您的代码。
  • 添加了 showInfo 的代码 - 这是由实用程序模板创建的原始 showInfo 方法。
  • 如果将其更改为 [self showInfo:nil] 会发生什么;
  • 你能不能NSLog(@"Entered in showInfo:"); in showInfo 并检查它是否被调用?
  • 哦等等,你的 [super viewDidAppear:YES];??

标签: objective-c ios xcode viewdidload viewdidappear


【解决方案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");
    }
}

【讨论】:

  • 是的,就是这样。需要延迟,但为什么呢?
  • 我认为它用于过渡风格和我们想要的动画。
【解决方案2】:

你的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:容器缓存:YES]; [容器添加子视图:pvc.view]; [pvc viewWillAppear:YES]; [self viewWillDisappear:YES]; [UIView 提交动画];

所有这一切的重点是,您必须提供有关您希望实现的过渡的更多信息。有许多 UIView 类方法(如此处所示)处理设置视图转换和其他基于视图的动画。

那么这是做什么的呢?该代码将新视图控制器的视图(pvc.view)添加为“容器”的子视图。在这个应用程序中,“容器”视图是在新视图 (pvc.view) 被翻转时被翻转的视图。

同时调用新视图的viewWillAppear: 和旧视图的viewWillDisapear: 也很重要,因此当视图来来去去时,您期望发生的所有正确的事情都会发生。 [这个食谱可能被一些人认为是“老派”。在 iPhone OS 2.x 时代(当时不称为 iOS),Utility 模板有类似的代码,调用 viewWillAppear 和 viewWillDisappear 等。它今天仍然有效,fwiw。此处显示的代码位于应用商店的运输应用程序中,因此可以说它仍然符合犹太教规。 :-)]

值得注意的是,在 PersonDetailViewController(在此示例中)中,为了保持一致性,有类似的代码将所有内容都翻转回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多