I am building an app in which at some point I have to show TabBar Controller but my app allready has Navigation Controller, so the most obvious sollution would be to push TabBar onto Navigation.
Apple in it's developer documentation states following:
"You never want to push a tab bar controller onto the navigation stack of a
navigation controller. Doing so creates an unusual situation whereby the tab bar appears only while a specific view controller
is at the top of the navigation stack.
Tab bars are designed to be persistent, and so this transient approach can be confusing to users."
Well I made it this way not knowing about this recomendation :). Now I am wondering if my app could me rejected because of this. Do you have any experiences with this? What do you think aboute this?
I don't think they're going to reject your app (not sure about it, but I don't think anyone can be), but your structure seems very confusing.
have a look at this: iOs Human Interface Guideline
For example:
"Use a tab bar to give users access to different perspectives on the same set of data or different subtasks related to the overall function of your app. When you use a tab bar, follow these guidelines:
Don’t use a tab bar to give users controls that act on elements in the current mode or screen. If you need to provide controls for your users, use a toolbar instead (for usage guidelines, see “Toolbar”).
In general, use a tab bar to organize information at the application level. A tab bar is well-suited for use in the main app view because it’s a good way to flatten your information hierarchy and provide access to several peer information categories or modes at one time."
I think you should transform your tab bar in a tool bar.
Related
How to customize tab bar controller so that tabs appear on the top of the screen?Tabs should not appear at bottem of the screen.
Try this,
self.tabBarController.tabBar.frame=CGRectMake(0, 0, 320, 70);
You will need to create a custom control. The standard UITabBar does not offer the option to place tabs at the top unfortunately.
Tabs should not appear at bottem of the screen.
Actually, according to the iOS human interface guidelines, they should:
A tab bar appears at the bottom edge of the screen and should be accessible from every location in the application.
If you really wanted to do what you are asking, you could use a UITabBar directly (not touching UITabBarController). That handles drawing the tab bar itself, but doesn't do any view swapping for you. You should then write a custom container view controller using the view controller containment APIs (iOS 5 only) which you set as a delegate method on your tab bar, and then when the user changes tab, you swap in and out the relevant views.
Or you could use this open source version.
Don't make your top tab bar look like a standard Apple tab bar though, because they'll probably reject it from review. If you use a completely custom look you should be fine.
I'm working on an app that needs many TabBar Items (6 or 7). I don't think users like to click the "More" button on TabBars, so I'm wondering how to make my own TabBar that slides from left to right, so one can easily access all the buttons on the tabbar without pressing "More."
Thanks!
I agree with the other answer that it's a bad idea from a design standpoint.
Nevertheless, the technical answer is that you can simply embed a UITabBar in a UIScrollView. If you set the tab bar's width and the scroll view's contentSize appropriately, the tab bar will be scrollable. You will probably want to turn off bouncing and scroll indicators.
I didn't try it with a UITarBarController.
Opinions on whether this is a good idea or not aside
A simple carousel should be fairly simple to implement from scratch using a UIScrollView with UIButton subviews. which will provide all the scroll mechanics for you
As a sample idea.
A UISCrollView which spans the width of the device.
N buttons across the scroll content pane
Restrict scroller to horizontal scrolling.
Provide selected and unselected images for the buttons
Create glue code to ensure only one button is selected at a time (like Radio buttons)
But I do agree with the other posters that its a bad UI idea. Id be thinking UIToolbar for this.
Apart from considerations about UX and UI guidelines, a way you can implement such thing is implementing a tab bar from scratch. You can even find a tutorial here for iOS5.
Actually, implementing a tab bar and a tab bar controller is not difficult as it may appear at first sight, but given the effort involved, you could also ask you what value this kind of design add to your app and to the user experience.
In any case, if you decide to go for this path (a scrollable tab bar), I would suggest to make it such that the user cannot be misguided into thinking it's a standard tab bar.
That's against about every design guideline ever written for iOS.
(I know that Gift Plan for iOS has a scrollable tab bar, but it never hides items from the user.)
The HOW to do it has been accepted,
MOBILE DESIGN PATTERNS are not cast in concrete - it is about what is appropriate for YOUR app.
It used to be that web pages scrolled vertically and side-scrolling was frowned on.
But the tablet has been a game changer - people EXPECT to swipe side to side.
A comment on one case when scrolling tab view is actually highly appropriate ..
(a) Look at xFeed in App Store
This has 10+ topics like News Sports ... , easy to scroll to topic and click takes you to RSS feeds under it.
This is truly convenient for user, and in my opinion appropriate.
The alternative is to go back and forth between a menu of some kind and the target view - which could be a 2nd option, but from a quick browse experience this is good.
(b) USA Today is another example - even on its main website, has the < > arrows to scroll between topics or you can click on tabs at top. Admittedly the tabs themselves don't scroll, but you get the idea. The entire site, and the mobile experience for USA Today is strongly optimized around side swipeing between chapters.
(c) Presentations and content sites have come to be side scrolling as well.
(d) FINALLY on a Human Happiness viewpoint! People WANT TO TOUCH and PLAY with their mobile stuff. Not just tap!
So mobile touch is quite happy here. One more thing to swipe and slide :)
Here is a link of project with custom scrollable tab bar:
github - scrollable tab bar by BananaDev
It's free and provides a wide variety of customization options allowing you to fully change control.
I want to switch different tab bar controller with root view controller's buttons. I mean that I have several buttons and this buttons must have different tab bar controller. Is it possible?
It is possible if you have a navigationcontroller as a parent of both tabbarcontrolllers.
However I would advise against such an UI as it will most likely be confusing to the end user.
Why would you want to use this approach?
have a look at this: iOs Human Interface Guideline
I think that it's not recommended. For example:
Use a tab bar to give users access to different perspectives on the same set of data or different subtasks related to the overall function of your app. When you use a tab bar, follow these guidelines:
Don’t use a tab bar to give users controls that act on elements in the current mode or screen. If you need to provide controls for your users, use a toolbar instead (for usage guidelines, see “Toolbar”).
In general, use a tab bar to organize information at the application level. A tab bar is well-suited for use in the main app view because it’s a good way to flatten your information hierarchy and provide access to several peer information categories or modes at one time.
I want to use a Tab Bar App with a UINavigationController.
I followed this video tutorial. It looked nice and easy, but I am new to Objective-C.
When I do the what is shown at 2:50 in the video, I get these results: http://img4.hostingpics.net/pics/761392Capturede769cran20110515a768024124.png
http://img4.hostingpics.net/pics/461473Capturede769cran20110515a768024130.png
The other thing in the video is he made an example for one item. What if I want two items in the navigation bar? Is it correct to have a separate navigation controller for each item?
If I understand correctly, you're asking whether if you have a tab-bar-based UI with navigation possible in each tab, you should have a UINavigationController under each tab.
Yes.
It is correct and required that you make a separate UINavigationController for each tab.
In my tab bar iPad application, one of my tabs needs to have an "ABPeoplePicker", ie a view exactly similar the view that ABPeoplePickerNavigationController presents. However, only the controller is exposed in the API and Apple warns against having several controllers to manage a single screen.
To expose the idea slightly differently, Apple explains how to use ABPeoplePickerNavigationController modally. That's about the only use case for the small iPhone screen, but the iPad larger screen allows for a modeless use case inside the screen.
Is this possible or do I have to redesign my picker from scratch?
I was trying to do just that and did not succeed.
A delegate can not be subviewed it seems.