How to remove SWRevealViewController? - ios

I am using SWRevealViewController in my iPhone app.
After successful login I am creating SWRevealViewController from my viewcontroller.
profileView *frontViewController = [[profileView alloc] init];
RearViewController *rearViewController = [[RearViewController alloc] init];
UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];
SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];
revealController.delegate = self;
frontViewController.user_id = [defaults objectForKey:#"userid"];
appDelegate.user_id = [defaults objectForKey:#"userid"];
[self.navigationController pushViewController:revealController animated:YES];
Now I want to logout and come back to viewcontroller. I tried poptoRootviewcontroller, but not working. How to do this ?

Try this - Call from your front/rear viewController:
[self.revealViewController.navigationController popViewControllerAnimated:YES];

Try this code on your action:
ViewController *vc = [[ViewController alloc]init];
UINavigationController *nvc = [[UINavigationController alloc]initWithRootViewController:vc];
[reveal pushFrontViewController:nvc animated:YES];

Related

[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1]

I have use [self.navigationController.viewControllers objectAtIndex:2]. So i need to set my viewcontroller in NSArray. But i tried below method, then i'm getting error. I understood i don't have array of 2. So, how can i set the viewcontroller in array and make as rootviewcontroller.
ARimageViewController *arimage = [[ARimageViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:arimage];
SampleViewController *sample = [[SampleViewController alloc] init];
UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:sample];
SettingsViewController *settings = [[SettingsViewController alloc] init];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:settings];
NSArray* controllers = [NSArray arrayWithObjects:nav,nav1,nav2, nil];
self.window.rootViewController = nav;
self.window.rootViewController = nav1;
self.window.rootViewController = nav2;
PushViewcontroller:
SettingViewcontroller:
SettingsViewController *set=[[SettingsViewController alloc]init];
[self.navigationController pushViewController:set animated:YES];
Back to pushviewcontroller:
Class vcClass = NSClassFromString(self.appViewControllerClassName);
id vc = [[vcClass alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:vc animated:YES];

Put a navigation controller in a tabbar controller

I have tried to add a navigation controller to a tab bar controller but the tab appear black.
My code:
AppDelegate.m
#import "SettingsNavigationControllerViewController.h"
#import "SettingsViewController.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
UIViewController *viewController1, *viewController2, *viewController3;
SettingsNavigationControllerViewController *viewController4;
UINavigationController *navigationController = [UINavigationController alloc];
viewController1 = [[FirstViewController alloc] initWithNibName:#"FirstViewController" bundle:nil];
viewController2 = [[SecondViewController alloc] initWithNibName:#"SecondViewController" bundle:nil];
viewController3 = [[ShareViewController alloc] initWithNibName:#"ShareViewController" bundle:nil];
SettingsViewController *settingViewController = [[SettingsViewController alloc] initWithNibName:#"SettingsViewController" bundle:nil];
viewController4 = [[SettingsNavigationControllerViewController alloc] initWithRootViewController:settingViewController];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = #[viewController1, viewController2, viewController3, navigationController];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
thank you in advance
This is because you added a navigationcontroller with no RootViewController and even doesnt initialized. Thats why the view appears as black. May be you mean to add viewController4 instead of navigationController . So change your code as below
self.tabBarController.viewControllers = #[viewController1, viewController2, viewController3, viewController4];
You need to first create the navigation controllers with rootviewcontrollers
viewController1 = [[FirstViewController alloc] initWithNibName:#"FirstViewController" bundle:nil];
UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
viewController2 = [[SecondViewController alloc] initWithNibName:#"SecondViewController" bundle:nil];
UINavigationController *navigationController2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
Then instantiate the Tab Bar controller like this
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController1, navigationController2, nil];
Create Navigation Controllers first.
UINavigationController *nav1 = [[UINavigationController alloc] init];
UIViewController *viewController1 = [[[FirstSteps alloc] initWithNibName:#"FirstView" bundle:nil] autorelease];
nav1.viewControllers = [NSArray arrayWithObjects:viewController1, nil];
UINavigationController *nav2 = [[UINavigationController alloc] init];
UIViewController *viewController2 = [[[Profiles alloc] initWithNibName:#"SecondView" bundle:nil] autorelease];
nav2.viewControllers = [NSArray arrayWithObjects:viewController2, nil];
Then initialize your tabbar controller like this.
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1,nav2 ,nil];
self.window.rootViewController=self.tabBarController;
Hope this helps you.
Hey mate please visit the below link for tab bar example.
I think this is good and nice example which would be helpful to you.
https://github.com/alikaragoz/AKTabBarController
You only have to set your controllers name in appDelegate.m file

Add a new viewcontroller to a tab controller

I have a tab bar controller created by a MainWindow.xib. I have 4 view controllers in it. Now i want to add a 5th item programatically (because I dont know which class I will have to use until compile time)
This is my code:
UIViewController * login = [[LoginUserViewController alloc] initWithNibName:#"LoginUserViewController" bundle:nil];
NSMutableArray * viewControllersArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
[viewControllersArray addObject:login];
[self.tabBarController setViewControllers:viewControllersArray
animated:YES];
But I get
[LoginUserViewController viewControllers]: unrecognized selector sent to instance 0x95791b0'
When I reach this code
UINavigationController *navController = [tabBarController.viewControllers lastObject];
LoginViewController * log = [navController.viewControllers objectAtIndex:0];
Where am I going wrong? Any ideas?
Thanks a lot
If this is all your code, it does not look like you are instantiating the navigation controller. Look at:
initWithRootViewController:
in the UINavigatorClass. I would replace:
UINavigationController *navController = [tabBarController.viewControllers lastObject];
with:
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: [tabBarController.viewControllers lastObject]];
Edit:
One more thoughts:
Looks like you lucked out on the "tabBarController" property since you might have synthesized it as #synthesize tabBarController=tabBarController;
I strongly recommend you use the latest version of XCode which will automatically do the #synthesize for you. The line before last in your code should be self.tabBarController
You forgot that last tab is LoginUserViewController and not an instance of UINavigationController.
After adding LoginUserViewController to tab bar controller, your last view controller in tab bar controller's array will be LoginUserViewController and not an instance of UINavigationController
UINavigationController *navController = [tabBarController.viewControllers lastObject];
Hence above line will return LoginUserViewController's object in navController variable.
RecordsViewController *recordsViewController = [navController.viewControllers objectAtIndex:0];
Hence above line will cause crash as LoginUserViewController don't have viewControllers property.
Try this....
- (void) setUpTabBar {
FirstViewController *firstViewController = [[FirstViewController alloc]init];
firstViewController.title = #"First View";
firstViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemSearch tag:0];
UINavigationController *firstNavController = [[UINavigationController alloc]initWithRootViewController:firstViewController];
SecondViewController *secondViewController = [[SecondViewController alloc]init];
secondViewController.title = #"Second View";
secondViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1];
UINavigationController *secondNavController = [[UINavigationController alloc]initWithRootViewController:secondViewController];
ThirdViewController *thirdViewController = [[ThirdViewController alloc]init];
thirdViewController.title = #"Third View";
thirdViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemRecents tag:2];
UINavigationController *thirdNavController = [[UINavigationController alloc]initWithRootViewController:thirdViewController];
ForthViewController *forthViewController = [[ForthViewController alloc]init];
forthViewController.title = #"Forth View";
forthViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemHistory tag:2];
UINavigationController *forthNavController = [[UINavigationController alloc]initWithRootViewController:forthViewController];
tabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:nil];
tabBarController.viewControllers = [[NSArray alloc] initWithObjects:firstNavController, secondNavController, thirdNavController, forthNavController, nil];
tabBarController.delegate = self;
[self sizeViewToAvailableWindow:[tabBarController view]];
[firstNavController release];
[firstViewController release];
[secondNavController release];
[secondViewController release];
[thirdNavController release];
[thirdViewController release];
[forthNavController release];
[forthViewController release];
}

The correct way of adding a UINavigationController to a existing UIViewController

I'm trying to add a UINavigationController to my existing view controller by adding this in ViewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
navController = [[UINavigationController alloc]init];
[self.view addSubview:navController.view];
}
But by doing it this way, it completely blocks my view. It puts a UINavigationBar on the top but the rest of the view doesn't respond to input.
This is how I am presenting the view. The SecondViewController is the one I want to have a NavController:
UITabBarController *tabController = [[UITabBarController alloc] init];
FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:#"CardsViewController" bundle:nil];
UITabBarItem *tab1 = [[UITabBarItem alloc] initWithTitle:#"First"
image:[UIImage imageNamed:#"img1.png"] tag:1];
[viewController1 setTabBarItem:tab1];
SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:#"ShoppingViewController" bundle:nil];
UINavigationController *SecondViewNavCont = [[UINavigationController alloc]initWithRootViewController:viewController2];
UITabBarItem *tab2 = [[UITabBarItem alloc] initWithTitle:#"Second"
image:[UIImage imageNamed:#"img2.png"] tag:2];
[SecondViewNavCont setTabBarItem:tab2];
UIViewController *viewController3 = [[UIViewController alloc] init];
UITabBarItem *tab3 = [[UITabBarItem alloc] initWithTitle:#"Third"
image:[UIImage imageNamed:#"img3.png"] tag:3];
[viewController3 setTabBarItem:tab3];
tabController.viewControllers = [NSArray arrayWithObjects:viewController1,
viewController2,
viewController3,
nil];
[self.view addSubview:tabController.view];
You cannot add it to the current view controller
What you need to do is instead of presenting the ViewController is to add this viewcontroller to the navigationview controller and present that
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:YourPresentedViewController];
//then present the navController
[self presentModalViewController:navController animated:YES];
Now when you present it do the following
NSArray arrayWithObjects:viewController1,
SecondViewNavCont,
viewController3,
nil];
You can try this code for load uiviewcontroller to uinavigationcontroller:
yourviewController *viewcontroller=[[yourviewController alloc] initWithNibName:#"yourviewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewcontroller];
[self presentModalViewController:navController animated:YES];
(or) you want to load uinavigationcontroller in application startup try below code in your application delegate class:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewcontroller.view];
[self.window addSubview:navController.view];
[self.window makeKeyAndVisible];
return YES;
}
Welcome!
You need to set the RootViewController for the navController object. Then further you can push UIViewcontroller objects using pushViewController method.
You need to add a view for that Navigation Controller. The added Navigation Controller has no view so it was overlaying on the UIViewController
You need to add
[[UINavigationController alloc] initWithNibName:#"ViewControllerName" bundle:nil];

iPad detailItem Access

In my AppDelegate I setup my splitview using the xcode4 template. The code is below. My question is, how do I access the detailItem property from my MasterViewControll's didSelectRowAtIndexPath method? The new splitview template changed the structure of the starter code and the detailViewController is no longer setup as an IBOutlet.
AppDelegate.m
masterViewController = [[MasterViewController alloc] initWithNibName:#"MasterViewController_iPad" bundle:nil];
detailViewController = [[DetailViewController alloc] initWithNibName:#"DetailViewController_iPad" bundle:nil];
UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.delegate = detailViewController;
self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];
self.window.rootViewController = self.splitViewController;
MasterViewController.m
I would like to do something like this:
self.detailViewController.detailItem = some object;
Try [[self.splitViewController.viewControllers objectsAtIndex:1] setDetailItem:someObject];.

Resources