当app进入后台时会调用方法

时间:2013-04-03 21:24:50

标签: ios objective-c toolbar

我的应用程序包含一个表视图控制器和一个视图控制器。当我按下表格视图中的单元格时,该视图中的工具栏会在屏幕外滑动动画,当我在视图控制器中并向后按时,工具栏会向上滑动到原始位置。我的问题是,我想出了一个错误,当我在视图控制器中并按下主页按钮退出应用程序然后回来。应用程序恢复我离开的位置但当我返回到桌面视图时,工具栏向上移动超出其原始位置。当我在应用程序退出之前,工具栏的滑动工作正常。所以有一些东西被调用来重置工具栏到它的原点,从而添加额外的y轴点向上移动更多。有谁知道那些方法是什么?

代码:

我在视图控制器的viewWillAppear方法中有这个:

[UIView animateWithDuration:0.7 animations:^{
        self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, self.navigationController.toolbar.center.y + self.navigationController.toolbar.frame.size.height);
    } completion:^(BOOL finished){
        self.navigationController.toolbar.hidden = YES;
    }];

并且在相同的视图中,当它需要消失时,我在viewWillDisappear中添加了它:

[[self.navigationController toolbar] setHidden:NO];
    [UIView animateWithDuration:1 animations:^{
        self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, self.navigationController.toolbar.center.y - self.navigationController.toolbar.frame.size.height);
    } completion:^(BOOL finished){
    }];

我试过这个作为动画隐藏工具栏动画的另一种方法,但没有动画:

- (void) viewWillAppear:(BOOL)animated
{
    [self.picker setHidden:YES];


    [self.navigationController setToolbarHidden:YES animated:YES];

}

- (void) viewWillDisappear:(BOOL)animated
{


    [self.navigationController setToolbarHidden:NO animated:YES];


    [self.course setValue:self.nameTextField.text forKey:@"courseName"];
    [self.course setValue:[NSNumber numberWithInt:[self.creditsTextfield.text integerValue]] forKey:@"courseCredits"];
    [self.course setValue:[NSNumber numberWithInt:[self.chaptersTextfield.text integerValue]] forKey:@"courseChapters"];
    [self.course setValue:self.gradeTextfield.text forKey:@"courseGrade"];
}

3 个答案:

答案 0 :(得分:0)

首先,你应该使用frame而不是center,但是用这个替换viewWillDisappear动画行:

self.navigationController.toolbar.frame = CGRectMake(0,0,self.navigationController.toolbar.frame.size.width, self.navigationController.toolbar.frame.size.height);

并告诉我会发生什么......

那应该解决你的问题。

答案 1 :(得分:0)

由于您使用的是属于UINavigationController的工具栏(而不是由您自己的控制器实例化并添加到UIView的独立UIToolbar),因此最好使用UINavigationController公开的方法,因为您不知道它是如何管理的并移动它的UIToolbar。

尝试将此放在viewWillAppear:中,而不是整个动画块

[self.navigationController setToolbarHidden:NO animated:YES];

并在viewWillDisappear中显示:

[self.navigationController setToolbarHidden:YES animated:YES];

答案 2 :(得分:0)

我修好了!我在viewWillDisappear中添加了以下几行代码:

 self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, 458);
    self.navigationController.toolbar.center = CGPointMake(self.navigationController.toolbar.center.x, self.navigationController.toolbar.center.y + self.navigationController.toolbar.frame.size.height);

因为问题似乎是当应用程序变为背景时,前景工具栏将重置为其原始位置,因此在导航回表格视图后,工具栏将移动到其原始位置之外。因此我添加的第一行将工具栏重置为原始位置,同时仍然隐藏然后将其向下移动。之后,动画块就完成了。我做了这个,以便动画适用于以下情况: 1.用户从表视图中输入详细信息视图,然后返回到tableview而不退出应用程序。 2.用户从tableview输入详细信息视图,然后退出应用程序,然后恢复应用程序并返回到表格视图。