iOS应用开发视频教程笔记(二)My First iOS App
這課主要是以一個計算器一個用為例子,教你怎么使用XCode,如何使用MVC設計模式創建應用。
(1)新建一個single view application模版的應用
打開xcode并點擊“創建一個新xcode項目”,進入項目創建界面,這個界面讓我們為應用選擇一個模板。接著選擇“single view application”模板,單擊next按鈕,進入項目詳細信息界面。
其中Company Identifier用來標志你的應用,要是唯一的,不要有沖突。class prefix通常與應用的名字一樣。這個use storyboard是ios5新特性,它允許把所有的view同時放到屏幕上,所以能看到它們之間的互動。storyboard能讓你在屏幕上看到MVC群的結構圖,看到MVC之間的關系。
接著單擊next按鈕,進入選擇保存項目目錄界面,選擇好后單擊create按鈕,就創建好了項目。
MainStoryboard.storyboard是我們MVC的view,所有MVC的所有view都在這里。在我們的例子里,storyboard會包含所有controller的view。系統不會自動創建model,因為系統不知道它是什么。
接下來構建計算器,需要一些控件如按鈕、文本框、顯示區域。這可以通過單擊右上角utilities按鈕實現,它會彈出一個區域:上部分叫inspector,用來顯示所選內容的更多信息;下半部分可以認為是一個向導,繪制view的向導,我們需要這個向導,因為我們需要對象庫。
還記得之前的那個MVC圖嗎?controller有個綠色箭頭能夠向view發話。
controller肯定需要和view對話,告訴它顯示內容、計算結果、輸入內容,所以要在controller中創建一個outlet到veiw里。實現這點不用打代碼,只需按住鍵盤control鍵,從顯示上拖出一條線到代碼上即可。label已經有個strong指針了,因為父窗口view已經有了strong指針指向它,所以label只需weak指針。IBOutlet這個類型沒有具體內容,只是xcode用來跟蹤哪個property是outlet的。controller已經準備好向label發話了,synthesize已經生成setter和getter,那什么時候調用呢?setter用來設置指針,當storyboard被讀取畫面出現在屏幕上時,ios就會調用setter去創建連接到outlet,當想要和label對話時就去調用getter?;氐綄ο髱焱铣鰎ound rect button到顯示界面上,現在要考慮controller和veiw的另一個連接,target action。所以controller要有一個target來接收鍵盤按鈕發送的action(用戶按下按鈕),操作只需按住control將按鈕拖出到h文件,IBAction實際上就是void,用ibaction是要讓xcode知道這是個action。這個target action就是當按鈕被按,它就發消息給controller,消息附帶參數,這個參數就是發送者自己,這里就是按鈕。復制粘貼按鈕,也會復制它的target actin,所以按鈕都會發送一樣的target action。
以下是CalculatorViewController.h文件的代碼:
#import <UIKit/UIKit.h>@interface CalculatorViewController : UIViewController {UILabel *display; }@property (strong, nonatomic) IBOutlet UILabel *display; - (IBAction)digitPressed:(id)sender; - (IBAction)operationPressed:(id)sender; - (IBAction)enterPressed;@endCalculatorViewController.m文件的代碼:
#import "CalculatorViewController.h"#import "CalculatorBrain.h"@interface CalculatorViewController ()@property (nonatomic) BOOL userIsIntheMiddleOfEnterNumber; @property (nonatomic, strong) CalculatorBrain *brain;@end@implementation CalculatorViewController@synthesize display = _display; @synthesize userIsIntheMiddleOfEnterNumber = _userIsIntheMiddleOfEnterNumber; @synthesize brain = _brain;-(CalculatorBrain *)brain{if (!_brain) {_brain = [[CalculatorBrain alloc] init];}return _brain; }- (IBAction)digitPressed:(UIButton *)sender {NSString *digit = [sender currentTitle];if (self.userIsIntheMiddleOfEnterNumber) {self.display.text = [self.display.text stringByAppendingString:digit];} else {self.display.text = digit;self.userIsIntheMiddleOfEnterNumber = YES;} }- (IBAction)operationPressed:(UIButton *)sender {if (self.userIsIntheMiddleOfEnterNumber) {[self enterPressed];}double result = [self.brain performOperation:[sender currentTitle]];NSString *resultString = [NSString stringWithFormat:@"%g",result];self.display.text = resultString; }- (IBAction)enterPressed {[self.brain pushOperand:[self.display.text doubleValue]];self.userIsIntheMiddleOfEnterNumber = NO; } @end現在需要建個model,我們已經有了controller和view還要有model。單擊菜單里File—NEW—NEW File創建文件,選擇objective-c class,單擊next,取名為CalculatorBrain保存位置與其它文件一樣。
需要一個棧來保持操作數、入棧運算、出棧運算等。怎么去實現一個棧?一個很簡單的辦法是使用數組。我們需要private接口,因為這個棧不是公共的,入棧出棧操作全在model里進行。當property創建的時候值是0或nil,那么向nil發送消息就什么也不會發生,因此需要一個構造函數來設置它,只需要在getter方法里判斷實體變量是否為空,如果為空就為它分配一個數組,同時也只分配一次,這叫延遲實例化。synthesize不會自動分配內存空間,synthesize只有一個變量指針,需要自己來分配空間。
以下是CalculatorBrain.h文件的代碼:
#import <Foundation/Foundation.h>@interface CalculatorBrain : NSObject-(void)pushOperand:(double)operand; -(double)performOperation:(NSString *)operation;@endCalculatorBrain.m文件的代碼如下:
#import "CalculatorBrain.h"@interface CalculatorBrain()@property (nonatomic, strong) NSMutableArray *operandStack;@end@implementation CalculatorBrain@synthesize operandStack = _operandStack;-(NSMutableArray *)operandStack{if (_operandStack == nil) {_operandStack = [[NSMutableArray alloc] init];}return _operandStack; }-(void)pushOperand:(double)operand{NSNumber *operandObject = [NSNumber numberWithDouble:operand];[self.operandStack addObject:operandObject]; }-(double)popOperand{NSNumber *operandObject = [self.operandStack lastObject];if (operandObject != nil) {[self.operandStack removeLastObject];}return [operandObject doubleValue]; }-(double)performOperation:(NSString *)operation{double result = 0;if ([operation isEqualToString:@"+"]) {result = [self popOperand] + [self popOperand];}else if([operation isEqualToString:@"*"]){result = [self popOperand] * [self popOperand];}return result; }@end?
轉載于:https://www.cnblogs.com/geory/archive/2012/12/11/2810869.html
總結
以上是生活随笔為你收集整理的iOS应用开发视频教程笔记(二)My First iOS App的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用矩阵的n次方求图的连通性
- 下一篇: 【转】无刷新验证用户名可用性