CollectionViewCell clicked Slow pass to another View controller - ios

I am developing iOS App. When I click on CollectionView Cell to pass the value to Another ViewController. Very Slow Pass to One ViewController to Another View Controller.
MEObject *objects = [_arrayData objectAtIndex:indexPath.row];
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:#"Main" bundle: nil];
MEDetailPageViewController *view = [mainStoryboard instantiateViewControllerWithIdentifier:#"detailPage"];
[view setProduct_ID:objects.me_product_id];
window.rootViewController = view;

In your collectionview didselectitematindexpath method change code as following:
MEObject *objects = [_arrayData objectAtIndex:indexPath.row];
MEDetailPageViewController *view = [self.Storyboard instantiateViewControllerWithIdentifier:#"detailPage"];
[view setProduct_ID:objects.me_product_id];
[self.navigationController pushViewController:view animated:YES];

Related

How to push to next view controller from xib select button

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];
}

Pushing view controller from AppDelegate - RESideMenu class

I am using RESideMenu class and using in content of this class navigation controller and in the left menu using some view.
This navigation is content main view and details view.
I want to push details view from app delegate when I receive notification, so I wrote that, but it's not working.
NSString *URL = #"any url";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"Main" bundle:nil];
UINavigationController *mainNavigation = (UINavigationController *) [storyboard instantiateViewControllerWithIdentifier:#"MainNavigation"];
MainViewController *mainVC = (MainViewController *) [storyboard instantiateViewControllerWithIdentifier:#"MainViewController"];
DetailViewController *detailVC = (DetailViewController *) [storyboard instantiateViewControllerWithIdentifier:#"DetailViewController"];
[mainNavigation setViewControllers:#[mainVC, detailVC]];
[mainNavigation popViewControllerAnimated:YES];
[detailVC setNewsLink:URL];
[mainNavigation pushViewController:detailVC animated:YES];
Anyone can help?
---------------------**
update
RESideMenu *sideMenu = (RESideMenu *) [storyboard instantiateViewControllerWithIdentifier:#"RootViewController"];
UINavigationController *mainNavigation = (UINavigationController *) [sideMenu contentViewController];
[mainNavigation pushViewController:detailVC animated:YES];
You are not taking "current navigation controller" and pushing to Details. You are instantiating a new mainNavigation (not current) and pushing to Details. You need to obtain current mainNavigation (storing in a property at startup, for example) and then pushing to new DetailViewController.
UPDATE
In that case, you are using RESideMenu. You have to take contentViewController (that may be a UINavigatorController) and push from it.
Example
DetailViewController *detailVC = (DetailViewController *) [storyboard instantiateViewControllerWithIdentifier:#"DetailViewController"];
NSString *URL = #"any url";
[detailVC setNewsLink:URL];
[((UINavigationController *)self.sideMenuViewController.contentViewController) pushViewController:detailVC animated:YES];
UPDATE 2
Probably, in your AppDelegate, the RESideMenu is your self.window.rootViewController. Then:
DetailViewController *detailVC = (DetailViewController *) [storyboard instantiateViewControllerWithIdentifier:#"DetailViewController"];
NSString *URL = #"any url";
[detailVC setNewsLink:URL];
RESideMenu *sideMenu = (RESideMenu *)self.window.rootViewController;
[((UINavigationController *)sideMenu.contentViewController) pushViewController:detailVC 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