Does anyone know how can I use my custom subclass of UINavigationBar
if I instantiate UINavigationController
programmatically (without IB)?
Drag a UINavigationController
in IB show me an under Navigation Bar and using Identity Inspectory I can change class type and set my own subclass of UINavigationBar
but programmatically I can't, navigationBar
property of Navigation Controller is readonly...
What should I do to customize the navigation bar programmatically? Is IB more "powerful" than "code"? I believed all that can be done in IB could be done also programmatically.
You don't need to muck with the XIB simply use KVC.
[self.navigationController setValue:[[[CustomNavBar alloc]init] autorelease] forKeyPath:@"navigationBar"];
Since iOS5, apple provides a method to do this directly. Reference
UINavigationController *navigationController= [[UINavigationController alloc]initWithNavigationBarClass:[CustomNavBar class] toolbarClass:nil];
[navigationController setViewControllers:[NSArray arrayWithObject:yourRootViewController]];
As of iOS 4, you can use the UINib
class to help solve this issue.
UINavigationBar
subclass.UINavigationController
as the single
object. UINavigationController
's UINavigationBar
to your custom subclass.[navController setViewcontrollers[NSArray arrayWithObject:myRootVC]];
[navController pushViewController:myRootVC];
In code:
UINib *nib = [UINib nibWithNibName:@"YourCustomXib" bundle:nil];
UINavigationController *navController =
[[nib instantiateWithOwner:nil options:nil] objectAtIndex:0];
Now you've got a UINavigationController
with your custom UINavigationBar
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With