How to load different Master&Detail view controllers on button click? - ios

I am new in Objective-C programming. I have developed an iPhone App and everything went Ok. Now I want to create the iPad version of the same App.
I started creating a split view controller. The problem is that I am not figuring out how to manage the master and detail views.
I want that my iPad version of the App behaves something like this:
When it is first run I want only to show the Master View Controller like in the photo:
And I want empty the part of the Detail View Controller. Also when the user changes the iPad orientation to portrait and the detail view controller is empty I want to show the Master view and not the detail view, otherwise is the detail view controller is not empty, on orientation I want to show the detail view.
Then onClick of the first Enter button in the Master View Controller I want to load a view for the Detail View just like in the photo:
Then on click of the button in the Detail View I want to load completely new Master and Detail Views :
I have read and seen different tutorials on managing split views but they all try to explain the use of Table View Controllers with Split View Controllers and I've nowhere found something similar to what I need.

I am not sure that you actually can leave the details view empty. I haven't tried it. Instead, make a view-controller with only white empty view, and place it at first.
I recommends you to put UINavigationController on each pane, and push your custom VCs into each NCs. Then you can perform push/pop/swap sub-VCs in NCs.

Related

Restrict the size of pushed view controller to the container view controller

I am implementing filters in my ecommerce iOS app. I want my filter functionality similar to ebay filter functionality.
Like in the gif attached when user taps on sort filter, the next view (maybe a view controller) opens and shows possible sort options. I am trying to replicate this functionality.
What i tried.
I have implemented a container view controller in which i am showing the filter options. when user taps on any filter item, i am performing a push segue(using storyboard) to next view controller in which i am showing relevant filter options
But the problem.
When i tap on any filter item to proceed further, my app opens the next view controller in full screen, not in the bounds of the container view controller.
See the gif
So how to restrict the next view controller's frame to its parent container view controller?
Also the height of the next view controller should be equal to the number of items in it. See the ebay filters gif. (This is secondary requirement)
Any help would be much appreciated.
I will suggest your view hierarchy should be like as follows.
Embed your container view controller (main filter screen) inside a navigation controller by going into editor (xcode menu) ==> embed in ==> Navigation Controller (story board should be open).
On didSelect method of container view controller, push your inner filter Controller by either storyboard segue or programmatically.
You need to make the view controller that wants to present define a presentation context, and then on the other view controller, make the presentation overCurrentContext. That should make the other view controller present itself only over the context of the parent.
This is the similar presentation style that is used on popovers.

iOS Swift How to go back from a split view to a normall view controller

I have a simple iOS app that I want to use a split view in, but I also need some normal view controllers(non Split view). So I have my story board setup like this:
Story board
I will add more views to the base navigation view depending on what they click on in the first view some will go to other standard views and one will go to another split view. as I can not add the split view to my base navigation view (get an error saying it had to be the root view) I replace the root view with the split when the button is clicked using a replace Segue.
My question is: how do I get back to the first view once I am in the splitview? can I somehow had a custom back button to the detail view title bar to go back? Or am I going about the whole thing wrong? Any help or a push in the right direction would be great!
I ran into this problem myself. Unfortunately, UISplitViewController cannot be added as a child of another view controller. I must be the root view controller of a window. From the docs: When building your app’s user interface, the split view controller is typically the root view controller of your app’s window. The way I got around this was just creating a container view controller in my storyboard: It ended up looking like this:
It's pretty basic, just adding the two view controllers as children of the parent view controller. You can control the width of each on straight in IB.

Partial segue to show settings view

in the google maps app for ios. When you select the settings button, it will show you a view of options such as "traffic", "public transit", etc.
My question is how this is done on ios.
I tried following this tutorial but it says that it won't work on uinavigationviewcrollers. I have seen this partial segue of the the view in apps that use a navigational controller. How do they create that?
It's not a partial segue. It's not a segue at all, it use of containment view controllers.
Instead of a single view controller which transitions to a different view controller image one single master view controller. For simplicity, we'll say this view controller has two views (of the root), both of which cover the the whole screen. For this example let's think of them as "main" view and "menu" view.
Other than these two empty views, the view controller has no content. That's because this view controller does nothing other than manage other view controllers which get stuck into the two views. It will have a couple methods manage them, like presentInMainView:(UIViewController *)viewcontroller and presentInMenuView:(UIViewController *)viewcontroller
When the program starts running the master view controller will programmatically add the map to it's "main" view. The map view controller now cover the whole screen and looks and acts like it's the top level view controller, but it isn't. It's contained. At some point some taps the settings button and the map view controller will make a call to it's parent and say presentInMenuView:... and the master view controller will then load up a second view controller into the menu view. The menu view could even be located off the left side of the screen and the master view controller animates the menu view frame to side it right covering the whole screen. Assuming the menu view controller only has content which covers the left half of the screen you'll see the map view controller hiding behind it.
That really only scratches the surface, lots can be done with container view controllers. You could create a container which lets you brings up a dozen different views all populated with view different view controllers. You could size and arrange them on all over the screen and each child view controller could still only have to deal with it's own contents.
For more info there is the Apple Developer Guide and the WWDC 2011 Videos where it was introduced (session 102)
I used SWRevealViewController For similar type of sidebar animation.They given the good example of how to use SWRevealViewController also please try it once.

IPad Split View Implement in Another View

I am creating a iPad App and it has several views to load data,but for one view i need to add split view. I dont need split views in other views. They are just detail pages. I search Through the net and found lots of tutorials based on iPad split view. But the problem is they all are creating a project as Split view project or they create a window base app and add slipt view to the delegate. I dont need to do that, I need to implement this split view only for one view. Is There any way to overcome this problem?
You can add the split view inside a Navigation Controller.
Even if the Split View is a container view controller and Apple recommends in the documentation that all containers should not be embedded in other containers, adding a split view inside a navigation controller works correctly and I never noticed any side effect in doing it.
Basically what you should do is:
- in the app delegate create a UINavigationController and use it as root view of your application window
- hide the navigation controller navigation bar if you don't want to see it (showing a split view with a main navbar on top is not nice looking...)
- then add your view controllers inside the navigation bar.
Example: imagine you have this application views sequence:
FIRST VIEW (full view = detail page)
SECOND VIEW (split view)
THIRD VIEW (full = detail page)
So you can represent FIRST and THIRD as standard view controllers (full screen), while SECOND will be a split view. Your app will be initialized by creating the main navigation controller, adding FIRST on it as top controller and using the main navigation controller as window's root view.
Than use the navigation controller push, pop methods to switch between these views or change the navigation controller "viewControllers" array directly if you don't want the recommended push/pop methods.
If you need to add special behavior to the navigation controller based on the type of view on top, just register your app delegate as navigation controller delegate (or a "main controller" object dedicated to this if you don't want to complicate your app delegate).
I am not 100% sure, but it seems to me that you can't use a SplitView just somewhere in your view hierarchy.
The Apple intended way is to use the SplitViewController as the top level controller. The left side of it can include a drill down mechanism with a navigation controller so you are ably to drill down hierarchies and the right side will present details for the item you select on the left side.
If you need a view with some kind of split mechanism in it, you probably have to code it yourself. Or even better: find some other mechanism you can use in your UI.
How are you switching your view hierarchies now? Maybe you could integrate your existing UI into a SplitViewController?

Split view MasterViewController with multiple table views

I have a split view working great. However, I'd like to be able to drill down on my Master-Detail view's UITableView. For example, I have a list of ages: 0, 1, 2, 3, 4, 5. When the user presses 3 I would like a new UITableView to be presented with all the kids names that are 3.
Ideally I'd like use Storyboards to accomplish this (link an add button to take me to the next UITableView). When I try and add a view it shows up as a full screen view. How can I make this view show up in the Master section of the split view?
When using Storyboards, if you want to have multiple UITableViews so it will allow the user to drill down categories, you must use the Push Segue (set it to Master). Make sure you are not pushing a UINavigationController, but just the view you want listed. Then, to get back just use [self.navigationcontroller popViewControllerAnimated:YES];.
EDIT: (more info as asked for)
So in XCode/IB when you are on your main view and right click and drag it to another view, you will be presented with different choices. You want to select Push instead of Modal. This will allow it to push a new view onto the stack. You can also set it's destination to Master and it will size the IB view correctly.
Also, you don't always have to use a button to connect a view. You can also drag from the view controller itself to another view controller instead of a button to view controller. Then in your button code you can call [self performSegueWithIdentifier:#"someNameHere" sender:self]; to call the transition. This lets you do checks and validation before you move on to the next screen.
Just remember to click on your segue and name it (under identifier in the properties view). Then add the function prepareForSegue:sender: in order to transfer any variables or anything before it transfers (I rarely have to use this).

Resources