2015-06-10 134 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

我我不是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; 
} 

编辑:

在我的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; 
} 

Hope这有助于。

+0

我上面提供的AppDelegate m文件使用自定义标签栏项目,所以当我使用您的代码时,它会擦除所有这些。我不知道是否会更容易刮除标签栏控制器,并为每个视图控制器构建自定义标签栏,当然除了登录屏幕。 – shj997

+0

我也使用自定义标签栏项目。然而,我将它们设置在FirstViewController和SecondViewController中的'(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil'中。我会更新我的代码以向你展示我的意思。 – ABC

+0

得到它的工作。谢谢! – shj997

相关问题