iOS unable to load views - ios

I am trying to navigate from one view to another on touch of a button using iOS 5.0.
The code I am using
- (IBAction)Actionlogin:(id)sender {
NSLog(#" login button has been pressed");
NSLog(#"In init");
test_details *aSecondPageController=[[test_details alloc]initWithNibName:#"test_details" bundle:nil];
[self.navigationController pushViewController:aSecondPageController animated:NO];
}
I have two xib files test_details_iPhone.xib and test_details_iPad.xib
Inside my testdetails.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
NSLog(#"it is coming here in second view");
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
NSLog(#"it has been returned ");
return self;
}
LOGs
2013-04-25 11:06:17.191 app_gototest[3067:207] login button has been pressed
2013-04-25 11:06:17.194 app_gototest[3067:207] In init
2013-04-25 11:06:17.195 app_gototest[3067:207] it is coming here in second view
2013-04-25 11:06:17.196 app_gototest[3067:207] it has been returned
The view is not getting loaded onto the view. I suppose I am missing something.
application:didFinishLaunchingWithOptions: in appDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
** I am trying Jasper Blue's approach**
argc int 1
argv char ** 0xbfffed2c
*argv char * 0xbfffee44
In appDeleagte.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UINavigationController* navigationController;
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:_viewController];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:_viewController];
}
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}

You code looks OK, so it must be that self.navigationController is nil. . . Have you set up a navigation controller?
For your code to work, your current UIViewController needs to be contained within a UINavigationController. . . you can set up the UINavigationController as the root view controller in your application delegate as follows:
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UINavigationController* navigationController;
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
navigationController = [UINavigationController alloc] initWithRootViewController:viewController];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
navigationController = [UINavigationController alloc] initWithRootViewController:viewController];
}
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
return YES;
}
NB: You could clean the above code up a little, but you get the picture, which is that you have to set the root view controller to be a navigation controller, like this:
self.window.rootViewController = navigationController;
You could also make a custom root view controller if you like, but the above will let you achieve what you're trying to do - UINavigationController will be used as the navigation system throughout your app.

Your navigation controller is nil. So replace your didFinishLaunchingWithOptions method with
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
}
UINavigationController *navcontroller = navigationController = [UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = navcontroller;
[self.window makeKeyAndVisible];
return YES;
}
Now you have a navigation controller so the call to push method on the self.navigationController should push the second controller.

Please try
- (IBAction)Actionlogin:(id)sender {
NSLog(#" login button has been pressed");
NSLog(#"In init");
test_details *aSecondPageController=[[test_details alloc]initWithNibName:#"test_details_iPhone" bunndle:nil];
[self.navigationController pushViewController:aSecondPageController animated:NO];
}
// test_details_iPhone.xib and test_details_iPad.xib
//Change initWithNibName#"test_details" with test_details_iPhone or test_details_iPad

Related

Cant load ViewController when add local notification scripts to "didFinishLaunchingWithOptions"

after adding local notification script in "didFinishLaunchingWithOptions" it said
[1627:60b] Application windows are expected to have a root view
controller at the end of application launch
and this is the code
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
mainStoryboard = nil;
if (IS_IPHONE_5) {
mainStoryboard = [UIStoryboard storyboardWithName:#"MainIPhone5" bundle:nil];
}
else {
mainStoryboard = [UIStoryboard storyboardWithName:#"MainIPhone" bundle:nil];
}
UILocalNotification *localNotification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotification) {
SelectedTask = [localNotification.userInfo objectForKey:#"FullTaskName"];
TaskViewController *TaskViewControllerVar;
TaskViewControllerVar = [mainStoryboard instantiateViewControllerWithIdentifier:#"TaskViewController"];
TaskViewControllerVar.SelectedTask = SelectedTask;
self.window.rootViewController = TaskViewControllerVar;
NSLog(#"1");
}else{
RecordingViewController *RecordingViewControllerVar;
RecordingViewControllerVar = [mainStoryboard instantiateViewControllerWithIdentifier:#"RecordingViewController"];
self.window.rootViewController = RecordingViewControllerVar;
NSLog(#"2");
}
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
return YES;
}
remove this line
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
you also need to add the views. Like this:
self.window.rootViewController = TaskViewControllerVar;
[self.window addSubview:TaskViewControllerVar.view];
and
self.window.rootViewController = RecordingViewControllerVar;
[self.window addSubview:RecordingViewControllerVar.view];

How to load and unload a UIViewController from the window

I have create some logic when the app is loaded that I can load from 3 different views depending on some values I set in my plist.
This is what my code looks like
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//sets context for coredata
CoreDataController *coreDataController = [CoreDataController sharedManager];
coreDataController.managedObjectContext = self.managedObjectContext;
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
PrefsController *prefsController = [[PrefsController alloc] init];
NSDictionary *prefsDictionary = [prefsController readPrefs];
NSLog(#"%#", prefsDictionary);
NSString *projectListBoolString = [prefsDictionary objectForKey:#"ProjectListAvailable"];
NSString *installsBoolString = [prefsDictionary objectForKey:#"InstallsAvailable"];
NSString *finishinBoolString = [prefsDictionary objectForKey:#"FinishingAvailable"];
if (([projectListBoolString isEqualToString:#"T"]) && ([installsBoolString isEqualToString:#"F"]) && ([finishinBoolString isEqualToString:#"F"])) {
self.getProjectListViewController = [[GetProjectListViewController alloc] initWithNibName:#"GetProjectListViewController" bundle:nil];
self.window.rootViewController = self.getProjectListViewController;
[self.window makeKeyAndVisible];
}
else if (([projectListBoolString isEqualToString:#"T"]) && ([installsBoolString isEqualToString:#"T"]) && ([finishinBoolString isEqualToString:#"T"])) {
self.currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:#"CurrentProjectListViewController" bundle:nil];
self.window.rootViewController = self.currentProjectListViewController;
[self.window makeKeyAndVisible];
}
else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
}
return YES;
}
I would like to be able to then load and unload UIViewControllers (including removing from memory by using buttons presses etc.
I dont want to use a navigaiton based controller as I want the views to be static or individual if that makes more sense.
If someone could show me some example code to load a new UIViewController to the window and remove the old UIViewController that would be greatly apprecaited.
However I am not sure of the correct was to handle this, or even how the code looks.
any help would be greatly appreciated.
For me, is not a good way to load your view like this.
It would be better to load a rootViewController in your AppDelegate and add your current view depending of your plist inside the RootViewController :
AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
RootViewController *rootViewController = [[RootViewController alloc] initWithNibName:#"RootViewController" bundle:nil];
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
After in your RootViewController add a subview of the current view depending on your plist :
RootViewController.m
#pragma mark - View management
- (void)viewDidLoad
{
[super viewDidLoad];
NSDictionary *prefsDictionary = [prefsController readPrefs];
NSLog(#"%#", prefsDictionary);
NSString *projectListBoolString = [prefsDictionary objectForKey:#"ProjectListAvailable"];
NSString *installsBoolString = [prefsDictionary objectForKey:#"InstallsAvailable"];
NSString *finishinBoolString = [prefsDictionary objectForKey:#"FinishingAvailable"];
if (([projectListBoolString isEqualToString:#"T"]) && ([installsBoolString isEqualToString:#"F"]) && ([finishinBoolString isEqualToString:#"F"])) {
self.getProjectListViewController = [[GetProjectListViewController alloc] initWithNibName:#"GetProjectListViewController" bundle:nil];
// Add View Controller
[self.view addSubview:self.getProjectListViewController.view
}
else if (([projectListBoolString isEqualToString:#"T"]) && ([installsBoolString isEqualToString:#"T"]) && ([finishinBoolString isEqualToString:#"T"])) {
self.currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:#"CurrentProjectListViewController" bundle:nil];
// Add View Controller
[self.view addSubview:self.currentProjectListViewController.view];
}
else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController" bundle:nil];
// Add View Controller
[self.view addSubview:self.viewController.view];
}
}

How to Add Navigation Controller to AppDelegate for Universal App in IOS

How to Add Navigation Controller for Universal App ie.. iPhone and iPad in AppDelegate.m file.
Simple as this,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil];
}
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window makeKeyAndVisible];
return YES;
}

uinavigationcontroller navigation bar always hidden

I'm developing an iOS 4 application with latest SDK and XCode 4.2.
I'm using an UINavigationController and I don't want to show Navigation Bar. To do that, I use this code on AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
self.viewController = [[[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil] autorelease];
}
else
{
self.viewController = [[[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil] autorelease];
}
navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
navController.navigationBar.hidden = YES;
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
return YES;
}
But, this line, navController.navigationBar.hidden = YES; doesn't work. I don't see navigation bar on first view controller, but I see it on others views.
Any clue?
I have achieved this doing the following:
Setting navController.NavigationBar.hidden = YES; in AppDelegate, after alloc it.
Setting [navController setNavigationBarHidden:YES animated:YES]; on viewWillAppear: on every viewController that I pust to navController.
try
[navController setNavigationBarHidden:YES animated:NO]
The doc is here.
I think that the navigationBar has to be set hidden on the view, not on the controller.

login view does not load before main ViewController in Xcode 4

Here is the layout of my app.
ApplicationName
LoginViewController.h
LoginViewController.m
LoginView.xib
AppDelegate.h
AppDelegate.m
ViewController.h
ViewController.m
ViewController_iPhone.xib
ViewController_iPad.xib
Currently in my AppDelegate.m I have:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
LoginViewController *_loginViewController = [[LoginViewController alloc] initWithNibName:#"LoginView" bundle:[NSBundle mainBundle]];
self.loginViewController = _loginViewController;
[_loginViewController release];
[_window addSubview:[loginViewController view]];
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[[ViewController alloc] initWithNibName:#"ViewController_iPhone" bundle:nil] autorelease];
} else {
self.viewController = [[[ViewController alloc] initWithNibName:#"ViewController_iPad" bundle:nil] autorelease];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
My LoginView.xib has it's File's Owner defined as LoginViewController.
I was at first getting an error stating: reason: '-[UITableViewController loadView] loaded the "LoginView" nib but didn't get a UITableView.'"
I changed UITableViewController to UIViewController and I was able to run the app without an error. The only problem now is that my LoginViewController does not load. I see the blank grey ViewController_iPad.xib loading.
What am I missing here?
I can post up any other code that would be useful.
Thanks in advance!
You should be setting your window's root view controller to self.loginViewController.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.loginViewController = [[LoginViewController alloc] initWithNibName:#"LoginView" bundle:[NSBundle mainBundle]];
[self.loginViewController release];
self.window.rootViewController = self.loginViewController;
[self.window makeKeyAndVisible];
return YES;
}

Resources