【发布时间】:2012-12-12 09:46:55
【问题描述】:
我正在尝试实现自定义 UIActionSheet(由 ViewController 组成) 我已将视图控制器作为子视图添加到我的 rootView 的导航控制器
- (IBAction)ShowMenu:(id)sender
{
[self.navigationController.view addSubview:self.menuViewController.view];
[self.menuViewController setTest:YES];
[self.menuViewController viewWillAppear:YES];
}
这里的 MenuViewController 有一个 tableview 有几个选项可供选择。选择后,我将打开那些各自的 ViewController。假设我点击 menu1 然后打开 menu1ViewController 并且它工作正常。现在,当我关闭这个 viewController 时,我正在调用dismissViewController。
在 menuViewController 中,我已经编写了代码以通过 menuviewController 设置动画到底部,它工作正常。
但是MenuView的父级是TestViewController,当menuviewController向下动画时,不会调用viewdidAppear函数。
这就是我的问题,
我正在使用此代码通过 menuViewController 设置动画到底部
- (void) slideOut {
[UIView beginAnimations:@"removeFromSuperviewWithAnimation" context:nil];
// Set delegate and selector to remove from superview when animation completes
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
// Move this view to bottom of superview
CGRect frame = self.menusheet.frame;
frame.origin = CGPointMake(0.0, self.view.bounds.size.height);
self.menusheet.frame = frame;
[UIView commitAnimations];
}
// Method called when removeFromSuperviewWithAnimation's animation completes
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
if ([animationID isEqualToString:@"removeFromSuperviewWithAnimation"]) {
[self.view removeFromSuperview];
}
}
菜单视图控制器
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if(m_test)
{
[self slideIn];
m_test = FALSE;
}
else
{
[self slideOut];
}
}
【问题讨论】:
-
请格式化代码以便其他人理解...
-
MenuViewController -viewWillApper:, -viewdidAppear:代码好吗? -
看起来您的 TestViewController 实际上停留在视图层次结构中(即它是可见的),因此不会调用 viewWillAppear。来自文档:viewWillAppear ["通知视图控制器其视图即将添加到视图层次结构中"(developer.apple.com/library/ios/documentation/UIKit/Reference/…)
-
那么如何解决这个问题
-
您可以在动画停止时手动调用viewWillAppear,或者从TestViewController的viewWillAppear中提取部分功能到单独的方法中调用。顺便说一句,使用 UIView animateWithDuration:delay:options:animations:completion: 的块动画更方便。
标签: objective-c ios ios5 viewwillappear