Работа с представлением контейнера

Это моя ситуация. У меня есть вьюконтроллер. С тремя верхними кнопками и под кнопками контейнера. Когда вы нажимаете кнопку, представление контейнера должно измениться.

Это то, что я сделал в раскадровке.

  1. Перетащил контроллер представления в мою раскадровку. добавил в него 3 кнопки и контейнерный вид.
    Этот контроллер представления не относится к классу viewController.
  2. Перетащил в него второй вьюконтроллер. И контролируемое перетаскивается из containerView в этот контроллер представления. и выбранный переход для встраивания.

Теперь в коде я делаю следующее для контроллера viewController

-(IBAction)chooseFirstController:(id)sender {
    [self.childViewControllers.lastObject switchToFirst];

}

-(IBAction)chooseSecondController:(id)sender {
    [self.childViewControllers.lastObject switchToSecond];
}
-(IBAction)chooseThirdController:(id)sender {
    [self.childViewControllers.lastObject switchToThird];
}

И для моего containerController.h я делаю следующее.

@interface ContainerViewController : ViewController

@property (nonatomic,strong) FirstController *cont1;
@property (nonatomic,strong) SecondController *cont2;
@property (nonatomic,strong) ThirdController *cont3;
@property (nonatomic,strong) ContainerViewController *currentController;

И в моем контейнере.м

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.cont1 = [[FirstController alloc]initWithNibName:@"FirstController" bundle:nil];
    self.cont2 = [[SecondController alloc]initWithNibName:@"SecondController" bundle:nil];
    self.cont3 = [[ThirdController alloc]initWithNibName:@"ThirdViewController" bundle:nil];
    [self addChildViewController:self.cont1];
    self.currentController = self.cont1;
    [self.view addSubview:self.cont1.view];
}

-(void)switchToFirst {
    if (self.currentController != self.cont1) {
        [self addChildViewController:self.cont1];
        [self moveToNewController:self.cont1];
    }
}

-(void)switchToSecond {
    if (self.currentController != self.cont2) {
        [self addChildViewController:self.cont2];
        [self moveToNewController:self.cont2];
    }
}
-(void)switchToThird {
    if (self.currentController != self.cont3) {
        [self addChildViewController:self.cont3];
        [self moveToNewController:self.cont3];
    }
}

-(void)moveToNewController:(id) newController {
    [self.currentController willMoveToParentViewController:nil];
    [self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
                            completion:^(BOOL finished) {
                                [self.currentController removeFromParentViewController];
                                [newController didMoveToParentViewController:self];
                                self.currentController = newController;
                            }];
}

Но я продолжаю получать сообщение об ошибке «Нет известного метода экземпляра для селектора switchtoFirst» в моих IBActions.

Кто-нибудь может мне помочь?

Заранее спасибо.


person Steaphann    schedule 15.10.2012    source источник


Ответы (1)


Я предполагаю, что lastObject возвращает UIViewController и не знает, что это ContainerViewController, следовательно, не знает о методе switchtoFirst.

Попробуйте что-то вроде:

-(IBAction)chooseFirstController:(id)sender {
    UIViewController *vc = self.childViewControllers.lastObject;
    if([vc isKindOfClass:[ContainerViewController class]]) {
        ContainerViewController *containerVC = (ContainerViewController *)vc;
        [containerVC switchtoFirst];
    }
}
person Ali    schedule 10.03.2013