How to push to next view controller from xib select button - ios

I would like to push to ParcelPickUpViewController after I clicked a button in LocationDetailsTableViewCell xib. But I've written the code below and it able to run. But the result won't happen at all. Need help on this issue. Thanks.
In LocationDetailsTableViewCell.h
#property (nonatomic, strong) UINavigationController *viewController;
In LocationDetailsTableViewCell.m
- (IBAction)selectBtn:(id)sender {
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
ParcelPickUpViewController *vc = [mainStoryBoard instantiateViewControllerWithIdentifier: # "pickUpVC"];
[self.viewController pushViewController:vc animated: YES];
[self.viewController setNavigationBarHidden:YES animated:YES];
}

I think you have button in UITableViewCell.Now you want to navigate to next view from the button click.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = #"CustomCell";
CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:#"CustomCell" owner:nil options:nil];
cell = [nibObjects objectAtIndex:0];
}
cell.btnSelct.tag = indexPath.row;
[cell.btnSelct addTarget:self action:#selector(selectBtn:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
- (IBAction)selectBtn:(id)sender
{
//This is for XIB
ParcelPickUpViewController *vc = [[ParcelPickUpViewController alloc]initWithNibName:#"pickUpVC" bundle:nil];
//If you use storyboard
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
ParcelPickUpViewController *vc = [mainStoryBoard instantiateViewControllerWithIdentifier: #"parcelpickup"];
[self.viewController pushViewController:vc animated: YES];
}

Try This ...
- (IBAction)selectBtn:(id)sender {
ParcelPickUpViewController *vc = [[HomeScreenVC alloc]initWithNibName:#"pickUpVC" bundle:nil];
[self.viewController pushViewController:vc animated: YES];
[self.viewController setNavigationBarHidden:YES animated:YES];
}
option 2
you are created the Navigation controller not allocated the memory of your instance navigation controller, so do like
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
ParcelPickUpViewController *vc = [mainStoryBoard instantiateViewControllerWithIdentifier: # "pickUpVC"];
self.viewController = [[UINavigationController alloc] init];
[self.viewController pushViewController:vc animated: YES];
[self.viewController setNavigationBarHidden:YES animated:YES];
if you no need the setNavigationBarHidden then use like
option 3
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
ParcelPickUpViewController *vc = [mainStoryBoard instantiateViewControllerWithIdentifier: # "pickUpVC"];
[self presentViewController:vc animated:YES completion:nil];

(1) Make sure you have set the isInitialViewController(the first controller you want to display when app launch) in storyboard.
(2) If you did not add UINavigationController in storyboard, create it programeticaly and set it as rootViewController w.r.t your InitialViewController in app delegate didFinishLaunchingWithOptions.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
UIStoryboard *storyboard = storyboard = [UIStoryboard storyboardWithName:#"Main" bundle:Nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:#"Your_First_View_Controller_Identifier"];
UINavigationController *rootNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.window.rootViewController = rootNavigationController;
return YES;
}
(3) While navigating to your ParcelPickUpViewController just simply add below code:
- (IBAction)selectBtn:(id)sender {
ParcelPickUpViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier: # "pickUpVC"];
[self.navigationController pushViewController:vc animated: YES];
}

Related

How to assign self to another class object, while navigating to another view controller with out segue

I am using below code to navigate to another view controller, i want to assign this self to a delegate of another class, how do i do it ?
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
UINavigationController *controller = [storyboard instantiateViewControllerWithIdentifier:#"storyBoardID"];
self.navigationController presentViewController:controller animated:YES completion:nil];
Get your view Controller from Navigation Controller
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
UINavigationController *controller = [storyboard instantiateViewControllerWithIdentifier:#"navigationControllerID"];
TargetVC *targetVC = (TargetVC *)controller.viewControllers.firstObject
//OR
TargetVC *targetVC = (TargetVC *)controller.topViewController;
targetVC.mydelegate = self;
[self.navigationController presentViewController:controller animated:YES completion:nil];
Get your view Controller from TabBar Controller
UITabBarController *homeTabBar=[[UIStoryboard storyboardWithName:#"Main" bundle:nil] instantiateViewControllerWithIdentifier:#"homeTabBarID"];
TargetVC *targetVC =nil;
UINavigationController *nav = [homeTabBar.viewControllers objectAtIndex:0];
//if you have multiple tab then you can give Index as per your ViewController
targetVC =(TargetVC*)[nav.viewControllers objectAtIndex:0];
targetVC.mydelegate = self;
[self.navigationController presentViewController:homeTabBar animated:YES completion:nil];

App crash on UItable on iOS device not on simulator?

I have a table view with some cells on it. When I tap on single-cell my app just gets crashed on the real iOS device but the app works fine on the simulator. Please tell me why the app crashing on a real device, not on the simulator.
Following is code for the app:-
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row==0)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:#"BusinessCard"];
[self.navigationController pushViewController:vc animated:YES];
}
else if(indexPath.row==1)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:#"NonBusinessCard"];
[self.navigationController pushViewController:vc animated:YES];
}
else if(indexPath.row==2)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:#"EventCard"];
[self.navigationController pushViewController:vc animated:YES];
}
}

iOS: Present segue programmatically without loosing the navigation

I'm working in iOS app but I'm trying to present a tableview when I click a button in one of my scenes like it shows in the image bellow:
I tried this way:
- (IBAction)presentScene:(id)sender
{
NSString *storyboardName = #"Main";
NSString *viewControllerID = #"myScene";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
MyViewController *controller = (MyViewController *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID];
[self presentViewController:_categoViewController animated:YES completion:nil];
}
But doesn't show the navigation to go back to the main table view or I can't even set the title of the tableview. Any of you knows how can present tableview?
try this:
[[self navigationController] pushViewController:YOUR_DESTINATION_VIEW_CONTROLLER animated:YES];
You should present the tableViewController with UINavigationController like so:
MyViewController *controller = (MyViewController *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
[self presentViewController:navigationController animated:YES completion:nil];
EDIT:
You should add a UINavigationController in your storyboard like this:
If you do not want to show the navigationBar in your HomeVC then hide it:
// HomeVC.m
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
Finally, push the MyViewController:
- (IBAction)presentScene:(id)sender {
NSString *viewControllerID = #"myScene";
UIStoryboard *storyboard = self.storyboard;
MyViewController *controller = (MyViewController *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID];
[self.navigationController pushViewController: controller animated:YES]
}
After experimenting with everything I finally found what I was looking for:
self.tabBarController.selectedIndex = 1;

pass data between storyboard with tabBar and external xib

I want to pass data between storyboard with tabBar and external xib .
I tried to use prepareforsegue but the method didn't call or if i define a segue this didn't recognize this .
my code is :
UIStoryboard *storyborad = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
UIViewController *view = [storyborad instantiateViewControllerWithIdentifier:#"<identifier>"];
[self.navigationController setNavigationBarHidden:YES];
[self.navigationController pushViewController:view animated:YES];
// [self performSegueWithIdentifier:#"try" sender:self]; // tried to use performSegueWithIdentifier but this recognize identifier
and the prepareforsegue method code :
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
BIDViewController *viewControllerView = segue.destinationViewController;
viewControllerView.isViewPushed=1;
NSLog(#"prepareForSegue");
Instead of this:
UIStoryboard *storyborad = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
UIViewController *view = [storyborad instantiateViewControllerWithIdentifier:#"<identifier>"];
[self.navigationController setNavigationBarHidden:YES];
[self.navigationController pushViewController:view animated:YES];
Try this:
UIStoryboard *storyborad = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
BIDViewController *view = [storyborad instantiateViewControllerWithIdentifier:#"myIdentifier"];
view.isViewPushed = 1;
[self.navigationController setNavigationBarHidden:YES];
[self.navigationController pushViewController:view animated:YES];

MFSideMenu: UIScrollView doesn't show images

I am using MFSideMenu in my app which have 4 UIScrollViews with the same code I am using the same exact code in this tutorial in 4 different UIViewControllers which added as subviews whenever they're chosen form the SideMenuViewController and that is the code I am using to do that
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 1 //or any Index) {
UIViewController *centerController = [[UIStoryboard storyboardWithName:#"MainStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:#"centerController"];
UIViewController *secondController = [[UIStoryboard storyboardWithName:#"MainStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:#"secondController"];
[centerController.view addSubview:secondController.view];
UINavigationController *navigationController = self.menuContainerViewController.centerViewController;
NSArray *controllers = [NSArray arrayWithObject:centerController];
navigationController.viewControllers = controllers;
[self.menuContainerViewController setMenuState:MFSideMenuStateClosed];
} }
The problem here is that the the view controllers don't show any images they show the UIScrollView background, though and when I test them separated in another application they work
After searching for a few hours I didn't find the solution anywhere, but I managed to fix it myself.
The problem happened because I shouldn't have used addSubView and should have used my new view controller as a UINavigationController instead.
Like this:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 1 /*or any Index*/) {
UIViewController *centerController = [[UIStoryboard storyboardWithName:#"MainStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:#"centerController"];
UIViewController *secondController = [[UIStoryboard storyboardWithName:#"MainStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:#"secondController"];
//Now we no longer need this-->[centerController.view addSubview:secondController.view];
UINavigationController *navigationController = self.menuContainerViewController.centerViewController;
//Edit starts here
NSArray *controllers = [NSArray arrayWithObject:secondController];
//Edit ends here
navigationController.viewControllers = controllers;
[self.menuContainerViewController setMenuState:MFSideMenuStateClosed]; }
}

Resources