Pushing UITableViewController (search bar disappears) - ios

So I'm trying to push a UITableViewController from another controller and the search bar on my UITableViewController doesn't show up.
Here's my .m for the original table. (attempting to push to the "xSearch" view controller)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
xSearch *itemSearch = [[xSearch alloc] init];
}
if([[tableData objectAtIndex:indexPath.row]isEqual:#"Search"]){
[itemSearch setTitle:[tableData objectAtIndex:indexPath.row]];
[self.navigationController pushViewController:itemSearch animated:YES];
}
In my storyboard, the "xSearch" viewcontrolelr consists of a table and a search bar. But only the table shows. Any help would be greatly appreciated.
By the way, I'm not trying to code the search bar. I'm just wondering why it doesn't appear when I run the app.

Because you are not initializing itemSearch using storyboard. You should initialize it using storyboard like-
NSString *storyboard = [UIStoryboard storyboardWithName:#"MainStoryboard_iPhone" bundle:nil]; //specify your storyboard name
xSearch *itemSearch = [storyBoard instantiateViewControllerWithIdentifier:#"xSearchStoryboardIdentifier"]; //You need to provide storyboard id in storyboard(Identity Inspector)
And then push it
[self.navigationController pushViewController:itemSearch animated:YES];

It might be due to re-sizing issue, navigation bar might be hiding the search bar.
Try hiding the navigation bar using:
setNavigationBarHidden:animated:
In your nib file change the view property to view with navigation controller.. Then design your XIB.. Study this link.

Related

Title and nav bar disappearing when launching view controller with code [duplicate]

This question already has an answer here:
presentViewController does not show Tab Bar or Navigation Bar
(1 answer)
Closed 7 years ago.
I am using following code to launch a view controller modally. This view controller is not being created from scratch. Rather, I created and styled it in storyboard, gave it a name, embedded it in a navigation controller so it has a navigation bar and created cancel and done buttons, gave it a title and the code below launches it.
The problem is that while most of the features of the screen show up such as labels and images, the title and navigation bar that you can see in the storyboard disappear. Has anyone come across this issue and have a fix for it?
My code to launch VC created in storyboard.
- (void) editView:(id) sender
{
NSLog(#"launch button pressed");
UIStoryboard *storyBoard = self.storyboard;
IDEditVC *editVC =
[storyBoard instantiateViewControllerWithIdentifier:#"editvc"];
editVC.item = _item;
[self presentModalViewController:editVC animated:YES];
}
I think what's happening is that since you are directly instantiating the view controller by name it's getting just that from the storyboard rather than embedding it in the nav controller.
Try this:
In your storyboard, make the Navigation Controller the initial/root View Controller for the storyboard
Instead of instantiating by name, use UIStoryboard's instantiateInitialViewController method.
EDIT:
Based on your comments below, you might want to try this:
- (void) editView:(id) sender
{
NSLog(#"launch button pressed");
UIStoryboard *storyBoard = self.storyboard;
IDEditVC *editVC =
[storyBoard instantiateViewControllerWithIdentifier:#"editvc"];
editVC.item = _item;
UINavigationController *nav = [UINavigationController alloc] initWithRootViewController: IDEditVC];
// Do whatever setup you want to here for your title bar, etc
[self presentModalViewController:nav animated:YES];
}
Try to use PushViewController instead of instantiate:
How to push viewcontroller ( view controller )?
Good luck

Storyboard Segue From View Controller to Itself

I am trying to make a mechanism to drill down a file / folder list. The idea is to show the same file list view controller every time the user selects a folder, and show a file detail view controller if he/she selects a file.
So far, I have created a segue from the file list view controller to the file detail view controller, and a segue from the file list table view cell to the the file list table view controller:
The issue with this is that as soon as the user taps the cell, the segue is executed. I would like to remove the segue from the table view cell and make one from the file list view controller to itself. That way, I could trigger the right segue programmatically when the user tapped the cell.
So, my question is: Is it possible to create a segue from a view controller to itself in Interface Builder?
If you are using a navigation controller you need to push the ViewController into the nav stack. In this example, i named my ViewController "VDI" in my Storyboard ID setting.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:#"VDI"];
[self.navigationController pushViewController:dest animated:YES];
If you don't want the NavigationController to keep adding itself into your "Back" history you can pop the stack before adding to it like so.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:#"VDI"];
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:dest animated:YES];
Using Xcode 5 there is a much simpler solution.
Click the table cell in the storyboard
Open the Connections Inspector (right arrow icon in the upper right)
Under "triggered segues" you see "selection"
Drag from the circle next to "selection" to the cell in the storyboard
That's it.
I developed a method to create a segue using a phantom button. I believe it will solve your problem. You can read about it in my answer here.
Instead of performing a segue to the same controller, you can instantiate a view controller (the same one) from storyboard, and then push that onto the navigation controller.
Interface Builder approach: Just segue to a storyboard reference which refers back to the presenting view controller.
The correct answer is to use a Storyboard Reference that is referencing the UIViewController you want to segue to itself and then point the segue at it.
In IOS 6, there is a cleaner solution than using a phantom button. You can still define the segue from the table cell to the view controller, and look at the sender to cancel the automatically triggered segue:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//storyboards should use segues and override prepareForSegue instead
//but here we need custom logic to determine which segue to use
id item = [self.fetchedResultsController objectAtIndexPath:indexPath];
if (item meets condition) {
[self performSegueWithIdentifier:#"segue1" sender:self];
} else {
[self performSegueWithIdentifier:#"segue2" sender:self];
}
}
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
//ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath
return (sender == self);
}
Here's how you can push another instance of the current view controller without defining a segue or hardcoding its own identifier:
SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier];
[self.navigationController pushViewController: same animated: YES];
You just need to set the Restoration ID to be the same as Storyboard ID (there's a checkbox for that in IB).
Hope this helps.
I found that you can create multiple prototype cells.
Than you can link every cell (in the Storyboard) to a different View.
Something like this:
NSString *CellIdentifier = #"Cell";
if (Condition2 ){
CellIdentifier = #"Cell2"; }
if (Condition3 ){
CellIdentifier = #"Cell3"; }

Problem In UISplitViewController in iPad

I am working on UISplitView Controller. I have used a SplitView controller template of Xcode. Actually i wanted to implement a scenraio in which when i click on table view cell it should add a New Root Controller with a table View into the Navigation Stack.
i did it using the following code
- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NextViewController *nextView = [[NextViewController alloc] initWithStyle:UITableViewStylePlain];
[self.navigationController pushViewController:nextView animated:YES];
[nextView release];
}
It works perfect and i have used the RootView Controller code into the NextViewController so that when we click on New Screen's cell it should update my Detail Screen. But unfortuantely it is not updating my Detail Screen.
What can be the reason ??
Please help friends..
Thanks
To updating your Detail Screen. you need to implement a delegate method of communication between Current RootView controller and Detailview controller.
Best Wishes,

Pushing new view controller from UITableView on a Tab Bar application

I have an app with two bar in it.
one of the tab .xib includes UITableView, when the user select one of the cells, I want to show another UIViewcontroller (.xib file) that includes information about the his selection.
now, I've tried this
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath {
NextViewController *nextController = [[NextViewController alloc] initWithNibName:#"NextView" bundle:nil];
[self.navigationController pushViewController:nextController animated:YES]; [nextController changeProductText:[arryData objectAtIndex:indexPath.row]];
}
and nothing happened, the console is showing no errors at all.
what seems to be the problem?
thanks!
Nothing happened, because your self.navigationController returns nil.
For proper usage of Navigation controller, you must have at least one. For the case of TabBar application, for each tab you must associate not the UIViewController subclass, but UIViewController subclass nested in UINavigationController. That's easily done both in the .xib or in code. Just google for some tutorials.

How to navigate clicking row to another UITableView?

I am trying to show detailed UItable view when clicking on row. I used
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here. Create and push another view controller.
// AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:#"AnotherView" bundle:nil];
photoListViewController = [[PhotoListViewController alloc]initWithNibName:#"PhotoListViewController" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:photoListViewController animated:YES];
[photoListViewController release];
// [self.navigationController pushViewController:anotherViewController];
// [anotherViewController release];
}
This PhotoListViewController is an empty UITableViewController. As I know UITableViewCOntroller has a navigation controller implemented and I don`t have to create navigation controller. But When I clicked on row it does not navigate to second view.AM I have to make some connection on nib file?I only created this PhotoListViewController in File->New->UIViewCOntroller and selected UITableView.
EDIT : SOLVED
I solved my problem.I should use UINAvigation object.I thought that UITable has it but there was no ))

Resources