2015-06-10 7 views
0

Я хочу использовать сцену входа в качестве начального контроллера представления и подключить его к контроллеру представления вкладок. Я постоянно получаю следующее сообщение об ошибке:Подключить контроллер начального представления к контроллеру представления табуляции

, истекающий приложение из-за неперехваченного исключением 'NSInvalidArgumentException', причина: '- [UIViewController TabBar]: непризнанные селектор направлен например 0x7fe85a560fd0'

// LogInViewController.h 
#import <UIKit/UIKit.h> 

@interface LogInViewController : UIViewController <UITextFieldDelegate> 
@property (weak, nonatomic) IBOutlet UITextField *txtUsername; 
@property (weak, nonatomic) IBOutlet UITextField *txtPassword; 

- (IBAction)sigininClicked:(id)sender; 

- (IBAction)backgroundTap:(id)sender; 
@end 


// AppDelegate.m 
// 

#import "AppDelegate.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

// Assign tab bar item with titles 
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
UITabBar *tabBar = tabBarController.tabBar; 
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0]; 
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1]; 
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2]; 
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3]; 

tabBarItem1.title = @"Trucks"; 
tabBarItem2.title = @"Dashboard"; 
tabBarItem3.title = @"Map"; 
tabBarItem4.title = @"Settings"; 

[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"iu.png"] 
      withFinishedUnselectedImage:[UIImage imageNamed:@"iu.png"]]; 
[tabBarItem2 setFinishedSelectedImage:[UIImage imageNamed:@"dashboard.png"] 
      withFinishedUnselectedImage:[UIImage imageNamed:@"dashboard.png"]]; 
[tabBarItem3 setFinishedSelectedImage:[UIImage imageNamed:@"globe.png"] 
      withFinishedUnselectedImage:[UIImage imageNamed:@"globe.png"]]; 
[tabBarItem4 setFinishedSelectedImage:[UIImage imageNamed:@"settings.png"] 
      withFinishedUnselectedImage:[UIImage imageNamed:@"settings.png"]]; 

return YES; 
} 
+1

Добавить свой код ... Как мы можем видеть проблему без нее? – jcoppens

+0

Просто добавлен начальный файл h контроллера. Хотелось бы, чтобы я мог загрузить скриншот раскадровки, чтобы показать, что я имею в виду, но не могу, потому что я новый элемент переполнения стека – shj997

ответ

0

I Я не эксперт в ios, но вот как я сделал это программно недавно (без раскадровки) в моем приложении. Это код, извлеченный из моего appdelegate, но он должен работать и для вашей цели.

В файле .h:

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> 
     @property (strong, nonatomic) UITabBarController *tabBarController; 
     @property (strong, nonatomic) UIWindow *window; 

В файле .m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; 
    self.tabBarController = [[UITabBarController alloc] init]; 
    FirstViewController *firstvc = [[FirstViewController alloc] init]; 
    SecondViewController *secondvc = [[SecondViewController alloc] init]; 
    tabBarController.viewControllers = @[firstvc, secondvc]; 
    self.window.rootViewController = tabBarController; 
} 

EDIT:

В моей FirstViewController и SecondViewController .m файлов:

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

    if(self){ 
     self.tabBarItem.image = [UIImage imageNamed:@"img_vc1"]; 
     self.tabBarItem.title = @"My 1st View"; 
    } 
    return self; 
} 

Надежда это помогает.

+0

Мой файл AppDelegate m, который я предоставил выше, использует пользовательские элементы вкладки, поэтому, когда я использую свой код, он стирает все это. Интересно, будет ли проще очистить контроллер панели вкладок и создать пользовательскую панель вкладок для каждого контроллера представления, помимо экрана входа, конечно. – shj997

+0

Я также использую элементы табуляции. Однако я установил их в - '(instancetype) initWithNibName: (NSString *) nibNameOrNil bundle: (NSBundle *) nibBundleOrNil' в FirstViewController и SecondViewController. Я обновлю свой код, чтобы показать вам, что я имею в виду. – ABC

+0

Получил работу. Благодаря! – shj997

Смежные вопросы