Альтернатива подклассам UITabBarController - PullRequest
1 голос
/ 21 февраля 2012

Кажется, что UITabBarController не должен быть разделен на подклассы.Как бы вы порекомендовали мне реализовать TabBarController во вращающемся DetailView?

Спасибо!

1 Ответ

2 голосов
/ 21 февраля 2012

Вы можете добавить к своему контроллеру делегата на <UITabBarDelegate>,

создать вкладку программно

UITabBar * aTabBar;

и заполните его UITabBarItems а затем реализовать эту функцию для обработки касания на вкладке для переключения видов

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
}

Это краткая часть кода

@interface yourTabsViewController : UIViewController <UITabBarDelegate>
{
    UITabBar * mTabBar;
    NSMutableDictionary * mControllerPerTab;
}
@end

В вашей реализации:

- (void)viewDidLoad
{
    mControllerPerTab = [[NSMutableDictionary alloc] init];
    [mControllerPerTab setValue:controller forKey:@"aKey"];
        UIImage *bImage = /*icon of tab*/;
        UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"title" image:bImage tag:/*a tag for your tab*/];
        [tabBarItems addObject:item];
    }

    mTabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 49/*tabbbar lenght*/ - 44/*navigationbar length if it exists*/, self.view.bounds.size.width ,49)];
    [mTabBar setItems:tabBarItems];
    mTabBar.delegate = self;
    mTabBar.selectedItem = [tabBarItems objectAtIndex:0];
    [self tabBar:mTabBar didSelectItem:[tabBarItems objectAtIndex:0]];
    // Finally, add the tab controller view to the parent view
    [self.view addSubview:mTabBar];
    [super viewDidLoad];
}

Затем вы добавляете этот метод для управления переключением вкладок

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    int tag = [item tag];

    /*I'm using the tag to identify wich coltroller to open*/
    UIViewController * controller = [mControllerPerTab objectForKey:[NSString stringWithFormat:@"%d", tag]];
    controller.view.frame = CGRectMake(0,0,self.view.bounds.size.width,self.view.bounds.size.height - 49);
    [self.view addSubview:controller.view];
    [self.view addSubview:mTabBar];
    [self.view autoresizesSubviews];
}
...