I am new to the iOS development world so please be gentle if this a "Stupid" question. The project I am working on has two buttons that allows to swap between viewing of 2 different tables. Our users have stated that they would like a segmented controller if possible. This is just a "Nice to Have" option they wanted.
What we decided to do is fake the segmented controller by pushing the buttons against each other to give the same look to the user. But the problem is, even though the buttons are together, not overlapping, in the storyboard there is still whitespace between them when the simulator runs.
Any ideas on how to accomplish this task or is it impossible to eliminate the whitespace between buttons?
Thanks in advance.
It is possible to have no white space between buttons, although it seems as though you are going through a lot of trouble to replicate the "nice to have" functionality of the segmentControl when it is much simpler to implement a segmented control to do the things you are trying to do.
Getting past that, in the storyboard, add a horizontal spacing constraint between the two buttons and make sure the constant for the constraint is set to 0.
Related
I am making modifications to an existing iPad application, and I'm having a hard time dealing with really messy scenes in storyboards. Almost every scene in the app consists of multiple views laid one on top of the other, each containing a different set of controls. Depending on the situation or data coming into the scene, some views are hidden, and others are shown.
It takes a LOT of time to decipher such scenes, and even when I figure out what changes I need to make it's terribly difficult to make those changes, and easy to screw up other things.
As an example, the following scene has 3 views that could appear (Start View, End View, Drawer History), depending on the situation, and they are all laid out on top of each other...
This seems like a terrible way to handle this, and I'm having a hard time believing this is standard practice, but I'm not finding much in the way of alternatives. I find very little in the way of questions where people are dealing with this problem, and the tutorials on how to design user interfaces seem to be too simplistic and never deal with scenes that are complex enough to run into this problem.
Unfortunately, this app is my primary introduction to doing user interfaces in iOS, so it has apparently become the default solution in my head. I've tried many tutorials, but they take a long time and don't seem to ever get to a situation that needs such a technique to solve it.
I would hope there would be a solution where each alternate view in the scene could be laid out on its own, and be made to appear within a placeholder view as needed.
What would be a more enlightened / more manageable approach?
That's what you'll get with Storyboards/Nibs/Xibs. I'm not saying coding your UI is better than using interface builder, but it is, at least for me. I believe, as far as I know, there's no other way to handle such multiple layers of views in one view controller in interface builder. I actually used to use interface builder before and that's how I add multiple layers of controls too. Sometimes some views are initially made hidden, but that would probably confused me or the other developer looking at the layout. Sometimes I extend the viewcontroller height to know that there's a view container with a constraint a thousand constant or a negative thousand constant to make it hidden and ready to animate when it's needed to be shown.
There are ways to somehow improve and organize your Storyboards. You can separate modules into different storyboard files; you can use references; avoid segues; and whatnot. It's still an individual or team's preferences.
Some ref:
https://cocoacasts.com/organizing-storyboards-with-storyboard-references
https://medium.com/#stasost/xcode-a-better-way-to-deal-with-storyboards-8b6a8b504c06
EDIT:
I'm thinking you could also layout separate view containers into a separate xibs, and then call them or layout them when needed. But that would add more files to your project.
I know how to use tabBarController.
But I dont Know How to Create A Tabbed Page Like The Attached Image.
Whats The Name Of This Type Of Tab?
This is not any type of Tab. You can use a collectionView or a stackView for "Tabs" and a UIPageViewController for changing viewControllers.
You can check CocoaControls for similar controls, download source code and check their construction. You can possible do it with SegmentedControls (Or Custom UIViews for single Tab and draw in ScrollView) and UIScrollView as Content View (with Pagination On) as well, but it depends how much customisation is needed.
Trust me, it's REALLY tricky to obtain what you want with the iOS components. There are a lot of details that you will miss.
When I tried myself to build the same thing, it was like "ok I think I am reinventing the wheel, is not straight forward as I though, it require a lot of work"
You know you have to consider a lot of stuff like an User that start to scroll as a crazy between the pages and then tap on one tab bar button, and so on. Trust me, it's easy to have a working implementation, but it's really really difficult to obtain a PERFECT implementation
I decided to go for a library
https://github.com/aokizen/SPSlideTabBarController
https://github.com/xmartlabs/XLPagerTabStrip
but there are others that are all good to achieve what you want
Anyway if you want to go for your personal implementation I suggest a Segmented Control in the upper side and a PageViewController (maybe inside a Container View)
For iOS 7 and iOS 8, we're implementing these things that look like drop-downs, but each just launch a modal window.
What makes more sense, using 3 UIButtons, 3 UITableViews with 1 row, or something else? In the past, there would be more than one of these all lined up, so I would put them in a UITableView and set the accessoryView of the UITableViewCell. Using the cell was nice, but three UITableViews seem like overkill here and a maintenance hassel.
The closest post I found regarding this was one about using an UITableViewCell outside of UITableView
What would make the most sense is to follow the iOS design guidelines. Instead of trying to create custom dropdown menus (or worse: showing a drop down menu, but displaying a modal view when the user is expecting a drop down view), that UI could be replaced with 1 UITableView that has 3 UITableViewCells in it. The text on each cell would be the name of the setting to be changed and selecting the cell would push segue to the next page. This will give the app a uniform iOS UX; allowing users to know exactly how to use your app because it works similarly to other apps on their phone. Check out the Settings app on the simulator to see what I am describing.
I don't see any advantage to using a UITableView or a UITableViewCell. I think this is clearly a case for three UIButtons. You can set constraints to keep them nice and clean. One cool thing that might be worth investigating is using a unicode character for the downward arrow. That way you could have the tap feedback on the whole "thing" as you called it.
When I need to create sort of dropdown menus, I usually take advantages from UITableView, one above all is when you will need to add one or more selections in the dropdown you just need to change the data model.
UITableViewCells are easily customizable that means that you can create almost everything you want.
I think that your design doesn't adapt well to a mobile application, those kind of menu are more web style, with 3 buttons and a UIPickerView you can really improve the user experience and also adapt in a really easy way on the ipad embedding the picker in a UIPopoverController.
as i agree with #keithbhunter, but still if you want then may this links will help you.
http://code4app.net/ios/DXPopover/54741ca3e24741c56db03ca0
https://www.cocoacontrols.com/controls/kxmenu
https://www.cocoacontrols.com/controls/nidropdown
I wanna put "tabs" at the top of the view and I don't find in object library... does anyone knows? Thanks for the help.
Examples here:
http://imagizer.imageshack.us/a/img829/1808/47bw.jpg
http://imagizer.imageshack.us/a/img822/7048/oaum.jpg
There's a difference between navigational tabs like the second screen shot has and just a "tabbed" division of information like the first. The first one stays a single screen while the second one could also be considered an application that has different subviews under that tabbed navigation. The first screen is trivial and you should do this with UIViews with UILabels nested into them.
The second screen is more interesting. I don't think it's a good idea to use the built in tabbed navigation handlers because it's just not a good fit for that kind of layout. You could do it but you're writing a lot of code to get it completely like you want it. But if you would want to you could divide the screen with custom containers and trigger segues in the bottom part from the UIButtons you put on top and it's a pretty good way to handle those kind of segues from within Interface Builder.
More information:
http://sandmoose.com/post/35714028270/storyboards-with-custom-container-view-controllers
https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html
I have a simple application with a view controller consisting off 3 UITextFields, a DatePicker and a Segment Control.
I have spent a ton of time getting my ViewController scrollable with AutoLayout and a UIScrollView (entirely in Storyboard). The problem I'm getting now though is when I start typing in any one of the UITextFields, I'm suddenly not able to type in any of the other text fields, though I can dismiss the keyboard, select dates in the DatePicker and select segments in the Segment Control.
This was of course not the case before implementing the scroll view and this is only occurring on the actual device rather than in the simulator (emphasising the importance of testing on a device).
I have read through a few SO answers but none of them seem to work.
Please see a screenshot of how my views are set up:
I've also gone onto the UIScrollView and ensured the following three are unticked:
I've enabled and disabled each of them individually but with no luck.
It took a ton of time to get the AutoLayouts working so I honestly hope I won't have to adjust too much here.
My thinking is that because I'm trying to click on a textField, perhaps the View is treating that as I'm wanting to scroll also. Though of course, when I first invoke this view controller, I can click on the 1st, 2nd or 3rd TextField while scrolling, so that makes sense no sense.
One SO question said it was a bug during the iOS 7 beta phases, but my device is running iOS 7.0.4.
My scrollview doesn't have an outlet because this entire procedure was done using Storyboards, but I'm happy to create one if need be.
Reading the Apple docs, it looks like delaysContentTouches is exactly what's required here, but that's turned off in my UIScrollVIew.
Basically any suggestions or assistance with this would be massively appreciated - it's driving me mad!