I need to have one UIViewController's view visible on screen and part of another UIViewController's view visible above the first one. When needed, the second view should be maximised so that it covers most part of the first view.
How can I achieve this, preferably using iOS 7 interactive transitions (being able to drag the presented view), and keeping the two views managed by separate view controllers (not just stuffing both views into the same view controller)?
Here's a mockup to make things clearer:
Related
I have a simple project with one view controller. I want to add two views and create a transition between the two.
I've read that I must add the two views to a container view. When I drag the container view to the Document Outline, It appears at the same level as the views. I can't get it to be higher in the hierarchy. What am I missing?
Thanks!
Martin
"container view" in this case does not mean the container view you can select from the object library (this one you need if you want to embed viewcontrollers in other viewcontrollers) but just a regular uiview. drag a regular uiview from the object library to your viewcontroller and put the views you want to animate into this container uiview.
You need to explain what you want to do more clearly. You also need to be careful to use the right terms. Views and view controllers are different animals. Pretty much everything that appears on the iOS screen is a view: Buttons, labels, text fields, switches, etc are all views. The object that manages a whole screen-full of views is called a view CONTROLLER. Do not call view controllers views.
If you want a transition where 1 view controller gets fully replaced by another, you don't want container views. You want to use a navigation controller or maybe a modal segue. If you want a second view controller's view to appear inside your first view controller's views, then you want a container view.
If you just want to add additional views (text fields, image views, buttons, etc.) to your view controller then you just drag those objects onto your first view controller's scene in your storyboard.
In order to provide more help than that you're going to have to be clearer about what you are trying to do.
I am trying to create an iPad app wherein I need to maintain a split view throughout the app. In the split view, the left view is static and the rightview changes according to the selection of left view. The right view in turn might contain toolbars through which I can navigate to new views, But the left view always remains same.
I might have gone in with a split view but the problem is the left view is not table view but I want to use a customised view here. Is it acceptable to do this?
Please suggest if there are any better ways make a split view without using the default split view controller.
A split view controller can have any type of view in each of its 'panes', the standard template has a table view but there is no requirement to do so. Start with the template and then edit the master view controller so it's a subclass of UIViewController, you can also remove or edit the XIB as you require.
I have the task to design a application that has a main view which is always visible (it has a button on it's bottom side, and when pressed a image displays on top of all views), and a set of TableControllerView's that should appear under it, and the user needs to be able to navigate through them.
I know that you can embed a view inside another, but you cannot refer more than one view to it. The current way I'm trying to do now load one TableViewController inside the embed view, and when the user clicks the cell I manually load the other controller and add it as a child of the main view, which is the RootViewController. The problem with this approach is that the navigation bar gets stuck using the root view controller, so I have to manipulate the main navigation items on each subview transition, and second is that the frame for the second view I load is coming as it had full size, making some cells be under the main view button. This way doesn't uses segues for transition, so it makes the storyboard kinda useless.
I was thinking into using a TabViewController with it's tab hidden, but wanted to ask here for a better solution.
As you discovered, a TableViewController likes to fill up the whole screen (except navigation bars, tab bars, status bar, etc. which are official Cocoa Touch GUIs). When you want a table view to fill only part of the screen, you are supposed to use a UITableView but not a UITableViewController. You set your custom view controller object (subclass of UIViewController, not UITableViewController) as the table view delegate and data source. You will need to duplicate part of the functionality of UITableViewController in your custom view controller, but it's not a lot more than you have to do already to supply the data.
You should probably follow the standard design pattern and have separate view controller objects for each of the "pages" the user can navigate to. You just have a main button and image on each of them. But I could imagine why that might not give you exactly the effect you want.
I'm having a view controller, that has few controls and images, and is located on top of the screen. I will have a space below it for child view controllers and their views.
I will show one child view controller at a time, what is a good way to do that?
Total amount of child view controllers is around 6, they are very different, so reusing some container view controller won't really work.
When pressing some button on these controllers I will move to next one.
Should I make some property, let's say contentView that will hold a view of the controller that is currently on screen?
How do I handle rotation if I don't use auto layout?
EDIT: This is more a theory question, I know of methods addChildViewController and know the way how I add views and controllers to their parents. I just want to know the good way to do that.
It depends somewhat on how you want to transition between the different child view controllers, but your question already lists a good approach.
You definitely want a different view controller for each of the children. Add a container view to your top level view. This view is where rotation and auto-resizing are handled. The contents of this view could be the child view controllers views themselves (and you control the transitions using one of the methods like transitionFromView:toView:duration:options:completion:) or the container view could hold a UINavigationController and you just push the child view controllers into it.
Whatever the container view holds, you need to take care if any of your child view controllers tries to present another view controller as a modal. The presented view controller needs to be presented by the view controller at the top of the hierarchy or the presented view may no interact correctly or truly be presented in front of other screen elements.
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?