Связанный с управлением вкладками в iphone - PullRequest
0 голосов
/ 10 ноября 2011

Заранее спасибо. Я хочу добавить два контроллера вкладок один сверху и другой снизу как enter image description here этот. Это возможно в iphone. Если возможно, и кто-нибудь знает, пожалуйста, помогите мне сделать это.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

UITabBar трудно изменить в ЛЮБОМ направлении.

Гораздо проще будет заменить его своим собственным. Offcorse, это может быть что угодно. Посмотрите на это:

//CustomTabBar.h:

#import <Foundation/Foundation.h>

@interface CustomTabBar : UITabBarController {
    UIButton *SHOPPING;
    UIButton *DINING;
    UIButton *MAPS;
    UIButton *PARKING;
    UIButton *PROMOTION;
    UIImageView *BarBackground;
}
-(void) addCustomElements;
-(void) hideExistingTabBar;
-(void) selectTab:(int)tabID;
@end

//CustomTabBar.m:
#import "CustomTabBar.h"

@implementation CustomTabBar

- (void)viewDidAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self hideExistingTabBar];
    [self addCustomElements];
}

- (void)hideExistingTabBar
{
    for(UIView *view in self.view.subviews)
    {
        if([view isKindOfClass:[UITabBar class]])
        {
            view.hidden = YES;
            break;
        }
    }
}

- (void)dealloc {
    [super dealloc];
}

-(void)addCustomElements
{
    //in your case you will need 2 bars, but I needed only one. Just add another one.
    BarBackground = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"BarBackground.jpg"]];
    BarBackground.frame = CGRectMake(0, 430, 320, 50);

    // Initialise our two images
    UIImage *btnImage = [UIImage imageNamed:@"BarShipping.png"];
    UIImage *btnImageSelected = [UIImage imageNamed:@"BarShipping.png"];

    SHOPPING = [UIButton buttonWithType:UIButtonTypeCustom]; //Setup the button
    SHOPPING.frame = CGRectMake(0, 430, 64, 50); // Set the frame (size and position) of the button)
    [SHOPPING setBackgroundImage:btnImage forState:UIControlStateNormal]; // Set the image for the normal state of the button
    [SHOPPING setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; // Set the image for the selected state of the button
    [SHOPPING setTag:0]; // Assign the button a "tag" so when our "click" event is called we know which button was pressed.
    [SHOPPING setSelected:true]; // Set this button as selected (we will select the others to false as we only want Tab 1 to be selected initially

    // Now we repeat the process for the other buttons
    btnImage = [UIImage imageNamed:@"BarDinning.png"];
    btnImageSelected = [UIImage imageNamed:@"BarDinning.png"];
    DINING = [UIButton buttonWithType:UIButtonTypeCustom];
    DINING.frame = CGRectMake(64, 430, 64, 50);
    [DINING setBackgroundImage:btnImage forState:UIControlStateNormal];
    [DINING setBackgroundImage:btnImageSelected forState:UIControlStateSelected];
    [DINING setTag:1];
    <...>


    // Add my new buttons to the view
    [self.view addSubview:BarBackground];
    [self.view addSubview:SHOPPING];
    [self.view addSubview:DINING];
    <...>


    // Setup event handlers so that the buttonClicked method will respond to the touch up inside event.
    [SHOPPING addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [DINING addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    <...>
}

- (void)selectTab:(int)tabID
{
    //if you will need navigation controller, or something, you will need to work on this part, or it will just crash.
    switch(tabID)
    {
        case 0:
            [SHOPPING setSelected:true];
            [DINING setSelected:false];
            <...>
            break;
        case 1:
            [SHOPPING setSelected:false];
            [DINING setSelected:true];
            <...>
            break;
        <...>
    }   

    if (self.selectedIndex == tabID) {
        UINavigationController *navController = (UINavigationController *)[self selectedViewController];
        [navController popToRootViewControllerAnimated:YES];
    } else {
        self.selectedIndex = tabID;
    }

}

- (void)buttonClicked:(id)sender
{
    int tagNum = [sender tag];
    [self selectTab:tagNum];
}

@end

Затем просто добавьте и используйте TabBarController как обычно. Единственное, что вам нужно сделать - это изменить класс TabBarController на этот, CastomTabBar в вашем xib-файле. (или выделите его этим классом, если вы добавляете его программно: UITabBarController * tb = [[CustomTabBar alloc] init];) И еще одна вещь: есть место, которое Presentet для tabBar, поэтому ваш вид изменился как обычно. Если вы используете этот код, он тоже будет, но на обычном месте tabBar - внизу. Для второй вкладки Bar вам нужно будет подготовить место самостоятельно. Надеюсь, это поможет.

0 голосов
/ 10 ноября 2011

Насколько я знаю, это должно быть возможно сделать.Просто добавьте один к вашему представлению, а другой к корневому контроллеру, в разных позициях, и вы сможете ссылаться в разных местах.Если нет, просто откройте фотошоп, «сделайте» панель вкладок и поместите под нее кнопки, чтобы имитировать эффект.

PS Саманта великолепна!ха-ха

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...