有人說Xcode4都提供完全自動構建介面了(詳細見第一篇文章),為什麼還要用完全手動的呢?雖然Xcode為我們提供了方便快捷的UI設計架構,但是架構架構畢竟還有他的局限性,有些地方還不如我們加兩行代碼來的輕鬆愉快,在加上使用完全手動構建介面有助於我們加深理解Cocoa touch裡面各種控制項的屬性方法,加深理解!
同第一篇一樣,這裡我們還是同樣構建一個一模一樣的溫度轉換器。
1.建立Xcode工程
對於手動建立介面來說,模板對於我們來說不重要。這裡方便講解,繼續使用和上一篇文章一樣的Navigation-based模板,填寫項目名稱其他選項均預設。這裡我建立工程名為HelloWorld2。
2.修改工程檔案結構
建立的工程包含HelloWorld2AppDelegate.h/HelloWorld2AppDelegate.m RootViewController.h/RootViewController.m 以及兩個xib檔案。
第一步,將RootViewController對應的頭和實現檔案以及xib檔案從項目中刪除,然後在工程上點擊右鍵選擇“New File...”,選擇Cocoa Touch選項卡裡面的“UIViewController subclass”, next之後在subclass of 裡面輸入“UIViewController”(預設就是),繼續“Next”,然後填寫建立的子類名稱,然後“Save”。
第二步,刪掉HelloWorld2AppDelegate.h及實現.m檔案。
第三步,找到HelloWorld2-Info.plist檔案,刪除叼Main nib file base name 欄位儲存。
做完這三步,檔案修葺工作就完成了。如
3.手動建立介面
在你建立的視圖控制類裡面,有這樣一個方法 叫viewDidLoad,看名字就知道當視圖被載入的時候會調用次方法,大多數view的初始化工作都放在此方法裡面。
根據我們之前在圖紙上設計的介面,我們現在需要兩個Label,兩個輸入框,一個按鈕,以及按鈕響應的方法。
第一步:點擊中RootViewController.h,在裡面定義兩個UITextField控制項,以及按鈕響應的事件。
@interface RootViewController : UIViewController
{
IBOutlet UITextField *field1;
IBOutlet UITextField *field2;
}
- (IBAction)convert:(id)sender;
@end
第二步:開啟RootViewController.m檔案,找到ViewDidLoad方法,將如下代碼粘貼在裡面
view plainprint?
UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//建立視圖
contentView.backgroundColor = [UIColor whiteColor];
self.view = contentView;
[contentView release];
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1.png"]];//使用指定圖片初始化UIImageView
bgImageView.userInteractionEnabled = YES;//互動
[self.view addSubview:bgImageView];//添加到視圖
field1 = [[UITextField alloc] initWithFrame:CGRectMake(130.0, 39.0, 145.0, 31.0)];//初始化輸入框
field1.keyboardType = UIKeyboardTypeNumbersAndPunctuation; //鍵盤類型
field1.borderStyle = UITextBorderStyleRoundedRect;
field1.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
field2 = [[UITextField alloc] initWithFrame:CGRectMake(130.0, 82.0, 145.0, 31.0)];
field2.borderStyle = UITextBorderStyleRoundedRect;
field2.enabled = NO;
field2.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(42.0, 43.0, 90.0, 21.0)];//初始化UILabel
label1.text = @"華氏溫度:";
label1.textColor = [UIColor greenColor];
label1.backgroundColor = [UIColor clearColor];
UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(42.0, 87.0, 90.0, 21.0)];
label2.text = @"攝氏溫度:";
label2.textColor = [UIColor greenColor];
label2.backgroundColor = [UIColor clearColor];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];//初始化UIButton
btn.frame = CGRectMake(124.0, 142.0, 72.0, 37.0);
[btn setTitle:@"轉換" forState:UIControlStateNormal];
[btn addTarget:self //設定點擊響應事件
action:@selector(convert:)
forControlEvents:UIControlEventTouchUpInside];
//將以初始化的控制項加入到視圖
[bgImageView addSubview:field1];
[bgImageView addSubview:field2];
[bgImageView addSubview:label1];
[bgImageView addSubview:label2];
[bgImageView addSubview:btn];
[field1 release];
[field2 release];
[label1 release];
[label2 release];
//設定title
self.title = @"Converter";
第三步:建立委託類
點擊main.m檔案在裡面輸入如下代碼
#import <UIKit/UIKit.h>
#import "RootViewController.h"
@interface HelloWorld2AppDelegate : NSObject <UIApplicationDelegate>
@end
@implementation HelloWorld2AppDelegate
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
RootViewController *rootView = [[RootViewController alloc] init]; //建立視圖
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootView];
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[window addSubview:nav.view];
[window makeKeyAndVisible];
}
@end
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"HelloWorld2AppDelegate");
[pool release];
return retVal;
}
4.編譯運行程式
這樣,一個完全手動建立視圖的溫度轉換器,新鮮出爐啦。雖然相比較自動累了點,但是你也瞭解了如何建立控制項,如何在建立視圖,如何將視圖現實出來等等,也對Cocoa Touch的控制項響應屬性方法熟悉了點,對於新手來說,是不是一種收穫呢?
其實還可以半自動半手動,比如建立控制項的那部分完全可以自動完成,下篇文章將會分享一下如何半自動半手動的構建介面檔案。
原創文章,轉載請保留此欄位出處:http://blog.csdn.net/everpenny/article/details/6892008