Using Interface Builder makes the application developing very easy, it separate out the presentation logic with the application logic. I like this idea, but for beginner only know the Interface Builder is not enough:
- It makes your job easier, but also hides the application information, and blocks you to understand the underlying mechanism. For example, When I investigate the sample code LocateMe, it uses UITabBarController and NavigationgController for each tab, when I read the source code, I don’t know the where the variable navigationController come from, I don’t know how it created. It is set in the nib file, and you have to read the reference document to see how it works.
- Sometime you need to customize your app, Interface Builder will not help you, you have to do it programmatically. For example, I tried to add a UIScrollView using the interface builder, but I found it does not scroll as I expected.
I google the solution and found this video is helpful:
Building iPhone Applications without Interface Builder from Troy Mcilvena on Vimeo.
And this blog:Why would you use Interface Builder for iPhone Development?
I just summarize the detailed steps:
1. In Xcode wizard, choose Window-based Application, then delete the MainWindow.xib, remove the property with the key ‘Main nib file base name’ (the raw key name is ‘NSMainNibFile’) from your Info.plist file.
2. In main.m, add your AppDelegate class name in the last argument of the UIApplicationMain method.
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"NoNibAppDelegate");
[pool release];
return retVal;
}
3. In AppDelegate class, initialize and configure the window and Controller object.
For example: NoNibAppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
window = [[UIWindow alloc] initWithFrame:[ [UIScreen mainScreen] bounds]];
RootViewController *root = [[RootViewController alloc] init];
[window addSubview:root.view];
[window makeKeyAndVisible];
}
4. In your ViewController class, implement the loadView() method
From UIViewController Reference document: If you create your views manually, you must override this method and use it to create your views
- (void)loadView
{
UIView *contentView = [[ButtonView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = contentView;
[contentView release];
}
5. In View class, implement the initWithFrame: method
“If you create a view object programmatically, this method is the designated initializer for the UIView class.” - From UIView reference document.
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor lightGrayColor];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)];
label.text = @"Hello World";
label.center = self.center;
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
[self addSubview:label];
}
return self;
}
6. You might want to register an UIControl event listener:
- Intitialize the UIControl object, for example a UIButton:
[buttonPress addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
- implement the event call back method:
-(void)buttonClicked:(id)sender
{
UIButton *button = (UIButton *)sender;
NSString *text = button.currentTitle;
NSString *string = [ [NSString alloc] initWithFormat:@"Button %@ pressed.",text];
NSLog(@"button clicked. button title:%@", text);
self.label.text = string;
[string release];
}
You can download my sample code from here.
From this investigation, I understand the iPhone application life cycle and event flow; know the underlying mechanism and get the confidence to customize application in future.
For learning iPhone, I am trying to follow the Shu-Ha-Ri learning model: at the Shu level, which is called following and copying, so I just follow one book: Beginning iPhone 3 Development: Exploring the iPhone SDK. I just follow step by step, copy every line of the code from the book. This is a very good book for the beginner who never touch the apple development environment like me, but it does not cover the deeper information, which I am really want to understand now.
So I think it is time for me to go to Ha level: which is breaking, it means trying to collecting different information and trying to read different article and books, Now I learned that it is time for me and I am ready to read Apple reference document, read advanced iPhone books, investigate the sample code, joining the forum, and practice.
Tutorial gives you a starting point, Interface Builder is a crutch, it is time for you to remove them if you want to get improved.
Here is my reading list for iPhone in fufure:
- Apple iPhone reference documents and API documents
- Apple iPhone sample codes
- The iPhone Developer's Cookbook: Building Applications with the iPhone SDK
This is a really good book, but not for beginner, it tells your more detailed information which is not covered in other books. I am waiting for the 2nd edtion.
References:
- iPhone Application Programming Guide
- The iPhone Developer's Cookbook: Building Applications with the iPhone SDK
Most iPhone applications are relatively inexpensive. With so many apps available it is important to keep the price down so that users will purchase the app.
ReplyDeleteIt's really great that iPhone's really striving to give the users everything they possibly need in a mobile phone.
ReplyDeletejust did potty after reading this...thanks!
ReplyDeleteGood tutorial. Unfortunately your download link doesn't work. Can you repost the binaries?
ReplyDeleteyour site is very informative
ReplyDeleteThank you
iPhone application development
your link to sample code is unfortunately broken!
ReplyDeleteThe old link is expired, sorry for that. I just upload my sample code in the git hub:
ReplyDeletehttps://github.com/stevez/iOS_nonib_sample
And Also I update the link in my article as well.
Thanks for pointing out.
Nice Post
ReplyDeleteFor More Information You Can Visit This Website iPhone Application Development Solutions
iphone app development in iOS framework much better after you no worries to compatible with others frameworks. All well reputed organizations developed these types of applications that have fewer chances of compatibles errors.
ReplyDeleteJohn hereiphone app development services plays an important role in mobile world. Keep sharing this type of information on regular basis, it will surely help young developers
ReplyDeleteCapanicus as a iPhone Application Development Company in India understand that the application is not about your organization, and it is not about our company and designers.
ReplyDeleteiPhone Application Development Company in India
Really nice blog.It contains very informative content. Good job.........
ReplyDeleteMobile Application Development
1. How To Build iOS Apps Without Interface Builder
ReplyDelete2. But why?
3. IB vs. Code (I) • Context shift • More evil conflicts • Options all over the place • Harder to get help • No betas for you
4. IB vs. Code (II) • No inheritance • Harder to DRY • Hard to see contraints • Really bad performance
5. Delete Storyboard
6. AppDelegate.swift import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? = UIWindow(frame: UIScreen.mainScreen().bounds) func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window?.rootViewController = ViewController() window?.makeKeyAndVisible() return true } }
7. UINavigationController import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? = UIWindow(frame: UIScreen.mainScreen().bounds) func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window?.rootViewController = UINavigationController(rootViewController: ViewController()) window?.makeKeyAndVisible() return true } }
8. Loading The View override func loadView() { view = FirstView() }
9. Demo • Login-Screen • Auto Layout • UIStackView • UITableView / UITableViewCell • UINavigationController • UITabBarController
Iphone App Developers
First of all, thanks for all the useful information. I want to thank you for emphasizing the importance of playing an important role in the accommodation industry. I appreciate your hard work. Keep posting new updates with us.
ReplyDeleteMindtechAffiliates.com
Thank you for posting this awesome article. I’m a long time reader but I’ve never been compelled to leave a comment. If you are interested in Android Application Development Company or want to discuss the importance of Mobile Application in the present scenario, contact anytime.
ReplyDeleteYou can also contact here, if you are looking forward to Hire Android App Developers