2013-03-07 4 views
3

, когда мы касаемся tabbaritem из tabbarcontroller методы делегата называются:почему выбор индекса tabbarController Programatically оленья кожа вызова метода делегата

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController; 
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

но при попытке сделать то же самое программно, т.е.

или

[self.tabBarController setSelectedViewController:[self.tabBarController.viewControllers objectAtIndex:0]]; 

методы делегата не называются. В чем причина этого?

ответ

0

Когда вы сами устанавливаете их с помощью кода, вы знаете, что это время, когда будет вызываться метод делегата. поэтому, что бы вы ни хотели, вы можете сделать это во время установки индекса программно. Предположим, вы хотите вызвать метод aMethod при вызове tabbardelegate. вы можете вызвать метод, как только вы установите индекс.

[self.tabbarController setSelectedIndex:selectedIndexNo]; 
[self aMethod]; 
+0

я знаю, что я могу сделать это, но почему он не работает так, как это предполагают, чтобы быть? – yunas

+0

вот как это должно работать. –

+0

вы можете вызвать делегатский метод самостоятельно, хотя его неправильная вещь делать, но вы можете рискнуть. [self.tabbarController setSelectedIndex: selectedIndexNo]; [YourViewControllerObject tabBarController: self.tabBarController didSelectViewController: [self.tabBarController.viewControllers objectAtIndex: selectedIndexNo] – Haider

4

переопределение UITabBarController setSelectedIndex:

-(void)setSelectedIndex:(NSUInteger)selectedIndex 
{ 
    //must call super function. 
    [super setSelectedIndex:selectedIndex]; 

    [self myMethod]; 
} 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    [self myMethod]; 
} 
Смежные вопросы