【问题标题】:how to know which viewController when subview is removed删除子视图时如何知道哪个viewController
【发布时间】:2010-12-09 05:40:59
【问题描述】:

- (void)animationDidStop:(CAAnimation *)动画完成:(BOOL)标志 { [[自我模型] setTransitioning:NO]; [[[[self view]subviews] objectAtIndex:0] removeFromSuperview]; }

我如何知道哪种 viewController 控制索引 0 处的子视图? 如果它是 QuizViewController,我需要在其上调用函数。

提前致谢。

很好的答案。我不相信我解释得足够多。这是一个视图控制器中的所有内容,它是一个视图堆栈。视图控制器使用动画转换手动添加和删除视图。我没有使用导航控制器,并且由于其他原因在此特定情况下无法使用。
有时我添加的视图是简单的 UIImageViews。有时它们是 QuizViews。 QuizViews 有一个 QuizViewController 因为它们需要内部功能。这是我用来添加视图的两个函数。

- (void)loadQuiz:(NSInteger )quizNum 

{ if([self quizViewController] != nil) { [自我 setQuizViewController:nil]; } QuizViewController *quiz = [[QuizViewController alloc] initWithNibName:@"QuizViewController" bundle:nil]; [测验设置:quizNum]; [自我 setQuizViewController:quiz]; [测验发布];

[[self view] addSubview:[[self quizViewController]view]];
[self setSlide1:[[[self view] subviews] objectAtIndex:0]];
[self setSlide2:[[[self view] subviews] objectAtIndex:1]];
[[self slide1] setHidden:NO];
[[self slide2] setHidden:YES];

[self performTransition];

}

- (void)loadImage:(NSString *)slideImage

{

UIImage *tempImg = [UIImage imageWithContentsOfFile:[Utilities localPathForFileName:slideImage]]; UIImageView *temp = [[UIImageView alloc] initWithImage:tempImg]; [[self view] addSubview:temp]; [temp release]; //[topView release]; if ([[[self view]subviews] count] > 2) { //add the 2nd subview //[[[[self view]subviews] objectAtIndex:0] removeFromSuperview]; } [self setSlide1:[[[self view] subviews] objectAtIndex:0]]; [self setSlide2:[[[self view] subviews] objectAtIndex:1]]; [[self slide1] setHidden:NO]; [[self slide2] setHidden:YES]; NSLog(@"%s %d",__FUNCTION__,[[[self view]subviews] count]); [self performTransition];

}

所以我的问题仍然是,在 animationDidStop 函数中我如何检测它是否是一个测验?

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    if ([[self view]subviews] objectAtIndex:0] isKindOfClass:CLASS(class)) ...

    或isMemberofClass

    凭记忆,所以你必须测试一下......

    您也可以在创建视图时为其设置标签,然后在检索视图时查找该视图。

    someUIView.tag=99;

    然后

    if ( [[self view]subviews] objectAtIndex:0].tag == 99 ) ...

    干杯

    【讨论】:

    • 好答案。我认为我解释得不够充分。
    【解决方案2】:

    您维护一个 UIViewController(例如 UIViewController *currentViewController)对象来跟踪当前视图控制器。
    现在,在推送到根据我的理解被多个视图控制器推送的视图控制器之前,您将 currentViewController 设置为您从中推送的视图控制器。
    因此,如果您在 QuizViewController 中并推送到控制子视图的 viewController,您首先设置它的 currentController 然后推送它。
    subViewController.currentController = self;
    [self.navigationController pushViewController:subViewController Animation:YES];

    【讨论】:

    • 出于特定原因我没有使用导航控制器。
    【解决方案3】:

    视图本身并没有附加视图控制器,因此您的问题措辞方式不太合理。如果你正在做的是拥有一个 UIView 子类,比如 QuizView,作为一个子视图,并且需要知道它何时被删除并对其采取行动,那么代码将如下所示;

    -(void) animationDidStop:(CAAnimation*)theAnimation finished:(BOOL)flag 
    { 
        [[self model] setTransitioning:NO]; 
        UIView *subview = [self.view.subviews objectAtIndex:0];
        if([subview isKindOfClass:[QuizView class]])
        {
            [(QuizView*)subview yourFunction];
        }    
    
        [subview removeFromSuperview];
    }
    

    如果您的意思有所不同,并且您可以提供一些代码,我可能会提供更多帮助,但就像我说的,如果这不是您的意思,您最初的问题对我来说不是很清楚;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多