Using MultipleView controller in Container view - ios

I am building an iOS app which have its many different views and difficult also.
I have a tab bar with 4 pages that are as under
Account
Main Page
Wallet
My Lists
when User will tap on List (4th num option), my app needs to show a Header with segmented control (or any top bar like control not decided yet) I want to move Multiple ViewController here . let say top bar has 5 buttons as under
Home list
Relative list
Friends list
office list
clients list
For these different list I have made different View controller. that I want to move in the My List (which is Main view controller and will be deal as a Master view controller and will contain above mentioned 5 buttons) In this Master view controller when I click Home list or Friends list button it will move related View controller just below this top bar (button list)
For more clarification see the picture below. And just let me know How can I do this. . How can I make specific area to be taken by child View controller.

Well I think you are a little confuse in using Container view using IB or by programmatically. when You use in IB , you have to simple create a related class for it. Just like You create View Controller by dragging from Object library and associate it with coca touch UIViewController class.
I will suggest to watch this tutorial. its quiet simple and easy to understand.
but the answer of your question is:
Take a UIView just below the top bar as you said in question. You can make it full width and full height however you like. Then create its out let. just like below and use this as
#IBOutlet var viewMain: UIView!
and just move your Child view controller with this
viewMain.addSubview(childViewController)
You are done

If SegmentControl views have same design then you do not need separate ViewControllers for each.
If Each list has totally different UI then there are many ways to do this.
1- Use scrollview,its content width will be Screenwidth * number of views.
Just add all the views in scrollView.
For Example you want to add to two views Here is the code
self.scrollView.contentSize = CGSize(width: UIScreen.main.bounds.size.width * 2, height: self.scrollView.frame.height)
let vc1 = your view controller
vc1.view.frame = CGRect(x: 0, y: 1, width: scrollView.frame.size.width , height: scrollView.frame.size.height)
let vc2 = your second viewcontroller
vc2.view.frame = CGRect(x: UIScreen.main.bounds.size.width, y: 1, width: scrollView.frame.size.width , height: scrollView.frame.size.height)
scrollView.addSubview(vc2.view)
scrollView.addSubview(vc1.view)
Now if you want to change visible view
scrollView.scrollRectToVisible(CGRect(x: UIScreen.main.bounds.size.width * CGFloat(//Position of your view 1 or 2), y: 0.0, width: UIScreen.main.bounds.size.width, height: scrollView.frame.size.height), animated: true)
2- Use Containers
3- There are very good open source libraries(pods) available as well.One one them is CarbonKit
https://github.com/ermalkaleci/CarbonKit

Related

Creating a view permanently underneath UINavigationBar

My issue is that i need to have a single view just below the UINavigationBar on screen at all times whilst navigating through a sign up journey. This is to display the current step in signing up. This needs to stay on screen at all times as the stages animate as they change so simply pushing a new view onto a UINavigationController isn't sufficient.
See an example of what i need to achieve below
I need to have the red item persist at all times even when a new view controller is pushed on
To try fix this I have created a custom UINavigationController in order to have a sticky view be present regardless of what view controller is showing.
I have created this code which suits my needs however doesnt feel like the correct option. Especially as I need to support iOS 10 and additionalSafeAreaInsets is not available
override func viewDidLayoutSubviews() {
stickyView.frame = CGRect(x: 0, y: navigationBar.frame.maxY, width: view.frame.size.width, height: 60)
children.forEach { $0.additionalSafeAreaInsets = UIEdgeInsets(top: 60, left: 0, bottom: 0, right: 0) }
}
What would be a good way to make sure that the view controllers frame starts below this header view? Or maybe an alternative approach?
There seems to be very little stuff on this topic from what i can see on stack overflow

How to add a fixed bar on the mapView on iOS

Recently, I have made a simple project which needs to use GoogleMap Api.
I think that my Question is so simple and easy,
but i don't know how to complete it.
Well this is my problem
i want to add a just simple bar on the View.(up 1, bottom 1)
these 2 bars are fixed. and also there is a button(like moving back button) on the bars that i can presse
Except 2 bar position, if i drag/swipe on mapView than change and show the location information.
please check the following image.(This is what i want to make.)
How can i put the bars on the view and let the bars can be seen in the simulator? plz let me know
(i dont upload code cuz it's not the problem about the code, just want to know about the concept of how to insert view(or layer?) like that)
First, let say you have a map view:
let camera = GMSCameraPosition.camera(withLatitude: 11.5449, longitude: 104.8922, zoom: 12)
let map = GMSMapView.map(withFrame: .zero, camera: camera)
map.isMyLocationEnabled = true
self.view = map
Then, you can just add your top and bottom views to the view as normal
let topBar = UIView()
view.addSubview(topBar)
let bottomBar = UIView()
view.addSubview(bottomBar)
And if you want to add other views such as texts and buttons, you can add them as subviews to the topBar or bottomBar view
let button = UIButton()
topBar.addSubview(button)
Noted: to put the views in the exact locations as in the image, you need to specify their locations.
For example:
bottomBar.frame = CGRect(x: 0, y: view.bounds.height - 200, width: view.bounds.width, height: 200)
In storyboard:
I didn't use google maps so here I'm using the default MKMapView as an example.
First, let's say we have a map view covering the entire view controller:
Then for the top bar, let's add a view and give it some constraints:
Now for the back button and the title:
Now, for the bottom bar: first we need a view to hold all the things:
For the texts, we use 4 uilabels, embed them into a stack to make them lined-up. Give some spacing as well to make them look good:
Finally, for the image on the right, we can use uiimageview or uibutton:
Don't forget to add constraints to the stackview and the uiimageview/uibutton

How show view overlay another view and change view size

How to achieve below task?
Explanation:
I want to show collection view over main view. Collection view must shown on half screen and change size to full screen by gesture(drag or swipe).
Please help me. How can I do that?
I think. I must use modalPresentationStyle and transitioningDelegate.
for half screen user UIView.animate with
CGRect(x: 0, y: containerView!.bounds.height / 2, width: containerView!.bounds.width, height: containerView!.bounds.height / 2)

Swift - SWRevealViewController menu placed after the status bar

I'm using SWRevealViewController menu and I have a header view for the table. You can see the table controller view structure and constrains:
And this is how my menu looks like
but I need it to be like
I tried :
self.profileHeader.frame = CGRect(x: 0, y: -20, width: profileHeader.frame.width, height: profileHeader.frame.height + 20)
But nothing changed.
Try using a normal UIViewController, and adjust constraints for the tableView manually check top constraint linked to view and not to top layout guide.
I hope this helps you, let me know about

How do I create a new View (or subView) with the tap of a button in swift?

I am currently making a flashcard app, and I am trying to make a button that creates an entirely new View (or subView) for the user to edit. Should I use Container Views? Collection Views? I also want to have these set to only one View Controller, so I can save the "cards" in one "set". Please Help!!
Edit: How can I save these views in a "folder" so the user can look at them later. Is there an efficient way to do this so the app doesn't slow or stop.
Edit #2: Ok, so I'm kind of getting it... collection views. But how would I implement this into my because I am using tvOS. Any thoughts?
If you want to create a new UIView programmatically, it's actually quite simple. You could create a method like this:
func addNewView(to container: UIView) {
let newView = UIView()
container.addSubview(newView)
newView.backgroundColor = UIColor.blue
newView.frame = CGRect(x: 10, y: 50, width: 200, height: 250)
}
That would create a new view inside whichever container view you passed in with a blue background, 10pts from the left (x-axis), 50pts from the top (y-axis, think a normal cartesian coordinate system with the y-axis inverted), width of 200 and height of 250.
You could then call this method on the push of a button by handling a button tap with it's own method like this:
func buttonTapped(_ sender: UIButton) {
addNewView(to: self.view)
}
Obviously all the values for the frame I gave you were just for an example so you could visualize it in your head, you can edit those however you want, or make calculations based on the size of your device's screen. You can get the device's screen size by saying self.view.bounds

Resources