Archive for the ‘Tutorial’ Category
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.
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
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