This is a follow up to the previous tutorial: How To Create a Custom Tab Bar (Part 2 of 2). One question I have been asked over and over is how to hide your new custom tab bar once it is in place. This is actually quite a simple process.
You can download a sample project containing the code to this article at GitHub: https://github.com/rumex/RXCustomTabBar
Before we start, I just want to say I know this is a messy way of doing things, it was simply done this way to illustrate the concepts behind this approach. One day when I have time I will create a proper standalone sub-class for custom tab bars. For now, please don’t moan at me on twitter.
We are very pleased that our latest iPhone application for Insurance provider Protectyourbubble.com has gone New and Noteworthy in the iTunes App Store. This is the second app in a row that has been recognised by Apple and is a reflection of the quality of the work we produce and our attention to detail.
For an app we were developing I found myself needing to know the model and the disk capacity of the device the app was running on.
I found plenty of resource for identifying the device. The two methods appear to revolve around either testing the device for feature combinations known to appear on certain devices or using the sysctlbyname function in the standard C library. For various reasons I opted for the latter more information on which can be found on this site: http://iphonedevelopertips.com/device/determine-if-iphone-is-3g-or-3gs-determine-if-ipod-is-first-or-second-generation.html
Next was trying to find the capacity. I could find very little information on this but eventually settled on this which worked well for me.
NSDictionary *fsAttr = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil]; float diskSize = [[fsAttr objectForKey:NSFileSystemSize] doubleValue] / 1000000000; NSLog(@"Disk Size: %0.0f",diskSize);
We had subclassed UITabBarController and hidden the existing buttons. Now all we need to do is replace then and create the functionality.
To download a demo project demoing the below click here: https://github.com/rumex/RXCustomTabBar
3. Add My Own Items
Now we are going to create our new buttons. You need to create your four buttons in both a selected and unselected state and add them to your project. Assuming a portrait orientation you are looking at 320px wide in total and 50px high. I am going to assume that our new buttons are 80px X 50px each.
So, back to XCode. more
So, iOrlando had been on-sale for 2 weeks when an email pings into my inbox:
“…when will you be upgrading iOrlando so that it works properly on an iPad?”
This user has bought iOrlando after being recommended it by a friend but she has bought it to use on her iPad. When she ran it she was disappointed to find that it only runs in a small window on her iPad and was wondering when we would be upgrading the app to run full screen.
The expectation of this lady that we would be releasing an update to make iOrlando a universal application got me thinking about the dilema that we keep facing with regards to our various applications with the release of the iPad. I wrote her an email to explain why we wouldn’t be making iOrlando a universal application and I thought I would set out my thinking here in case anyone else is wondering why as developers we aren’t rushing out to convert our apps. more
Just as we were about to go live with iOrlando, it became clear that due to some requirements from our sponsor a standard UITabBar would not work for our needs. The sponsor wanted to use just their logo for their tab and not have a text label.
Unfortunately the standard UITabBar controller is quite limited in terms of the styling. I know this is deliberate on apples part to provide uniformity of interface but that doesn’t always work as this example proves.
So, creating a custom nav bar. I found surprisingly little information on the internet on how to achieve this. I was clear that I would need to subclass UITabBarController but many of the solutions involved using private APIs and I needed to avoid this as I needed to get my apple approved for sale on the AppStore.
The basis of my approach is to create a “fake” tab bar that sits on top of the old tab bar and replicated it’s functionality. more