2010-12-09 5 views
0

как знать, какие ViewController когда подтаблица удаляется

 
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag 
{ 
    [[self model] setTransitioning:NO]; 
    [[[[self view]subviews] objectAtIndex:0] removeFromSuperview]; 
} 

How can I tell what kind of viewController controls the subview at index 0? If it's a QuizViewController I need to call a function on it.

Thanks in advance.

Good answers. I don't believe I explained enough. This is a all in a view controller that is a view stack. The view controller adds and deletes views manually with an animated transition. I am not using a navigationController and cannot in this particular instance for other reasons.
Sometimes the views I add are simple UIImageViews. Sometimes they are QuizViews. The QuizViews have a QuizViewController because they need internal functionality. Here are the two functions I use to add the views.

- (void)loadQuiz:(NSInteger)quizNum 

{ если ([SELF quizViewController] = NIL!) { [само setQuizViewController: ноль]; } QuizViewController * quiz = [[QuizViewController alloc] initWithNibName: @ "QuizViewController" bundle: nil]; [тест комплектUp: quizNum]; [self 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 как я могу определить, если это тест?

ответ

1

если ([[вид самостоятельной] подвиды] objectAtIndex: 0] isKindOfClass: CLASS (класс)) ...

или isMemberofClass

Из памяти, так что вы должны проверить его. ..

Вы также можете установить тег в представлении при его создании, а затем искать представление при его извлечении.

someUiview.tag = 99;

затем

если ([[вид] сами подвиды] objectAtIndex: 0] .tag == 99) ...

Приветствие

+0

Хорошие ответы. Я не верю, что достаточно объяснил. – intomo 2010-12-11 06:58:57

+0

Спасибо. Это сработало. – intomo 2010-12-11 21:28:11

0

Вы поддерживаете один UIViewController (например, для UIViewController * currentViewController) для сохранения следа текущего контроллера вида.
Теперь перед тем, как нажать на viewcontroller, который, согласно моему пониманию, подталкивается более чем одним контроллером представления, вы устанавливаете currentViewController с помощью viewController, с которого вы нажимаете.
Итак, если вы находитесь в QuizViewController и нажав на viewController, который контролирует subviews, вы сначала установите currentController, а затем нажмите.
subViewController.currentController = self;
[self.navigationController pushViewController: subViewController animated: YES];

0

В представлениях нет встроенных контроллеров представлений, поэтому способ, которым сформулирован ваш вопрос, не имеет смысла. Если то, что вы делаете, имеет подкласс 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]; 
} 

Если вы имеете в виду что-то другое, и вы можете предоставить код, я мог бы быть в состоянии помочь больше, но, как я сказал, ваш первоначальный вопрос не совсем ясно, для меня, если это не то, что вы имеете в виду;)