Ошибка: создание Tab-Navigation программно - PullRequest
0 голосов
/ 29 марта 2012

Извините, если эта проблема уже опубликована ..

Я хочу создать комбинацию TabBar и NavigationBar программно, используя XCode 4.2 и iPhone SDK 5.0

.TabBarItem нажат (приклеен), чтобы перейти к соответствующему представлению, он выдает ошибку: [__NSCFString _tabBarItemClicked:]: нераспознанный селектор, отправленный экземпляру

Вот реализация AppDelegat

#import "ApplicationDelegat.h"
#import "BrightnessController.h"


@implementation ApplicationDelegat

@synthesize window;
//@synthesize bControl;



- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    NSMutableArray *controllers = [NSMutableArray array];
    UITabBarController *tbarController = [[UITabBarController alloc] init];

    for (int i = 0; i <= 3; i++)
    {
        //self.bControl = [[BrightnessController alloc] initWithBrightness:i];
        BrightnessController *bControl = [[BrightnessController alloc] initWithBrightness:i];

        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: /*self.bControl*/bControl];

        nav.navigationBar.barStyle = UIBarStyleBlackTranslucent;
        [controllers addObject: nav];
        //bControl.tabBarItem = [[UITabBarItem  alloc] initWithTitle:@"test" image:nil tag:i];
        //tbarController.navigationController.delegate = self;
    }

    tbarController.viewControllers = controllers;
    tbarController.customizableViewControllers = controllers;
    tbarController.selectedIndex = 0;
    tbarController.delegate = self;

   // NSCFString
    //tabBarItem

    // Set up the window
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [self.window addSubview:tbarController.view];
    [self.window makeKeyAndVisible];
}

@end

Я не знаю, почему это происходит и как его восстановить .. Кто-нибудь, помогите мне.

Если требуется более подробная информация, я могу предоставить источниккод ...

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

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Я вижу две проблемы ...

  1. Вы присваиваете вид tabBarController как subView окна.Это неверноВам нужно установить rootViewController окна равным tBarController.
  2. Реализуете ли вы метод делегата панели вкладок tabBar:didSelectViewController:?В вашем сообщении об ошибке говорится, что вы пытаетесь отправить tabBar связанный метод на NSString.Я подозреваю, что это отчасти связано с пунктом (1).Попробуйте:

    self.window.rootViewController = self.tBarController;

1 голос
/ 29 марта 2012
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 7:20
switch(mytabbar.selectedIndex)
{
    case 0:
        [imageView1 setImage:[UIImage imageNamed:@"Tab1_sel.png"]];
        [imageView2 setImage:[UIImage imageNamed:@"Tab2.png"]];
        [imageView3 setImage:[UIImage imageNamed:@"Tab3.png"]];
        [imageView4 setImage:[UIImage imageNamed:@"Tab4.png"]];
        [imageView5 setImage:[UIImage imageNamed:@"Tab5.png"]];
        break;

    case 1:

Вы можете использовать этот метод и изменять индекс кликов на каждой вкладке

0 голосов
/ 29 марта 2012

Я обычно предпочитаю создать другой класс tabbarview, который обрабатывает все различные контроллеры представления, и в этом случае делегат приложения будет выглядеть так:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];        
ViewController *viewController = [[ViewController alloc] init];
self.window.rootViewController = viewController.myTabBarController;
[self.window makeKeyAndVisible];
return;
}

И в ViewController я делаю это:1005 * Заголовочный файл:

@interface ViewController : UIViewController {

IBOutlet UITabBarController *myTabBarController;
}

@property (nonatomic, retain) IBOutlet UITabBarController *myTabBarController;

А в файле реализации:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {

    exerciseViewController *viewController1 = [[exerciseViewController alloc] init];
    viewController1.title = @"Exercise";
    viewController1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Exercise" image:[UIImage imageNamed:@"inbox.png"] tag:0];
    UINavigationController *firstNavController = [[UINavigationController alloc]initWithRootViewController:viewController1];        


    bookViewController *viewController2 = [[bookViewController alloc] init];
    viewController2.title = @"Book";
    viewController2.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Book" image:[UIImage imageNamed:@"inbox.png"] tag:1];
    UINavigationController *secondNavController = [[UINavigationController alloc]initWithRootViewController:viewController2];


    askViewController *viewController3 = [[askViewController alloc] init];
    viewController3.title = @"Ask";
    viewController3.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Ask" image:[UIImage imageNamed:@"inbox.png"] tag:2];
    UINavigationController *thirdNavController = [[UINavigationController alloc]initWithRootViewController:viewController3];


    workshopViewController *viewController4 = [[workshopViewController alloc] init];
    viewController4.title = @"Workshop";
    viewController4.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Workshop" image:[UIImage imageNamed:@"inbox.png"] tag:3];
    UINavigationController *fourthNavController = [[UINavigationController alloc]initWithRootViewController:viewController4];

    myTabBarController = [[UITabBarController alloc] init];
    myTabBarController.viewControllers = [NSArray arrayWithObjects:firstNavController, secondNavController, thirdNavController, fourthNavController, nil];    


}
return self;
}

Это всего лишь пример ... и я думаю, что это правильный способ сделать это.

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