I want to use a login scene as the initial view controller and to connect it to a tab view controller. I keep receiving the following error message:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController tabBar]: unrecognized selector sent to instance 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;
}
I'm not an expert at ios, but here is how I did it programmatically recently (without storyboards) in my app. This is the code extracted from my appdelegate but it should work for your purpose as well.
In the .h file:
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
@property (strong, nonatomic) UITabBarController *tabBarController;
@property (strong, nonatomic) UIWindow *window;
In the .m file:
- (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:
Within my FirstViewController and SecondViewController .m files:
- (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 this helps.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.