Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 未调用ParentViewController的视图将出现_Objective C_Ios_Ios5_Viewwillappear - Fatal编程技术网

Objective c 未调用ParentViewController的视图将出现

Objective c 未调用ParentViewController的视图将出现,objective-c,ios,ios5,viewwillappear,Objective C,Ios,Ios5,Viewwillappear,我正在尝试实现自定义UIActionSheet(由ViewController组成) 我已将视图控制器作为子视图添加到我的rootView的navigationcontroller中 - (IBAction)ShowMenu:(id)sender { [self.navigationController.view addSubview:self.menuViewController.view]; [self.menuViewController setTest:YES]; [s

我正在尝试实现自定义UIActionSheet(由ViewController组成) 我已将视图控制器作为子视图添加到我的rootView的navigationcontroller中

- (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设置动画时,不会调用其中的函数ViewDidDisplay

这就是我的问题

我使用这段代码通过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];       
    }

}

当然,
-[UIViewController viewwillbeen]
-[UIViewController viewdidebeen]
只有在被调用方被类似于容器的控制器(如导航控制器、选项卡栏控制器)添加到视图控制器层次结构中时才会被调用

如果您只是通过在代码中调用
addSubview:
来添加视图,则不会调用它


您可以在调用
-addSubview:
之前和之后,在代码中以编程方式调用
-viewwillbeen
-viewdidebeen
,无论是否使用动画。

IMHO、
-[UIViewController-viewwillbeen]
-[UIViewController-viewdidebeen]
仅当被调用方被那些类似容器的控制器(如导航控制器、选项卡栏控制器)添加到视图控制器层次结构中时才会被调用

如果您只是通过在代码中调用
addSubview:
来添加视图,则不会调用它


在调用
添加子视图:
之前和之后,您可以在代码中以编程方式调用
-viewwillbeen
-viewdidebeen
,无论是否使用动画。

请格式化代码,以便其他人能够理解……
菜单视图控制器-viewWillApper:,-ViewDidDisplay:
code请?看起来TestViewController实际上位于视图层次结构中(即,它是可见的),因此不会调用ViewWillDisplay。从docs:viewWillExample[“通知视图控制器其视图即将添加到视图层次结构”()因此,如何解决此问题您可以在动画停止时手动调用ViewWillDisplay,或者将TestViewController的ViewWillDisplay中的部分功能提取到单独的方法中并调用它。顺便说一句,使用UIView阻止动画更方便。请格式化代码,以便其他人能够理解…
MenuViewController-viewWillApper:,-viewdi显示:
code请?看起来TestViewController实际上位于视图层次结构中(即,它是可见的),因此不会调用ViewWillDisplay。从文档中:ViewWillDisplay[“通知视图控制器其视图即将添加到视图层次结构”()因此,如何解决此问题您可以手动调用ViewWillDisplay当动画停止时,或者将TestViewController的ViewWillDisplay中的部分功能提取到单独的方法中并调用它。顺便说一句,使用UIView阻止动画更方便。感谢您的回复,那么我应该如何解决此问题以及我做错了什么here@Ranjit添加和ani与
TestViewController
视图匹配的子视图不会调用
TestViewController
的viewwillbeen、viewdidebeen、viewwilldefine或viewdidefine。您可以调用它们(或您希望准备的任何其他方法)手动。谢谢回复,那么我应该如何解决这个问题,我做错了什么here@Ranjit将子视图添加到
TestViewController
视图并设置其动画不会调用
TestViewController
的viewwillbeen、viewdidebeen、viewwilldefine或viewdidefine。您可以调用它们(或您希望准备的任何其他方法)手动。