1. 程式人生 > >iOS菜鳥成長筆記(1)——第一個iOS應用

iOS菜鳥成長筆記(1)——第一個iOS應用

前言:陽光小強最近抽時間學習iOS開發,在學習過程中發現了很多有趣的東西也遇到了很多問題,為了在學習過程中能和大家交流,記錄下學習的心得和學習成果,所以就有了這一個系列文章,希望這一系列文章能形成一個系統性的東西,讓和我一樣剛步入iOS開發的朋友少走彎路,用最少的時間獲得最大的收益。既然是學習筆記,希望大家多提意見,如果你是iOS大牛多多拍磚。

說起iOS開發很多朋友就會望而卻步,有一部分朋友可能是因為裝置因素,有一部分朋友可能是因為程式語言是Objective-C的原因,因為這些遲遲沒有拿起的iOS當你有一天進入它的世界,你就會發現其實是我們想多了,在Xcode上面開發iOS程式是非常方便快捷的,而且蘋果開發者官網為我們提供了很多關於iOS開發的文件和文章,學習起來非常方便。

一、著手開發IOS應用程式

(官網連結:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/index.html#//apple_ref/doc/uid/TP40012668)


正如上圖一樣,這篇文章(https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOSCh/index.html#//apple_ref/doc/uid/TP40012668)介紹了iOS開發工具Xcode的基本使用和開發的基本步驟和過程,建議都能讀一下。

iOS開發中使用的是MVC模型,這個對於做過java ee和Android的朋友來說已經很熟悉了,我們需要做的是把模型、檢視、控制器和工程中的檔案對應起來


下面我們先來新建一個iOS的專案

1、選擇 Create a new Xcode project --> iOS --> Application --> Single View Application (選擇單頁面模板)


2、專案結構


如上圖所示,我們先來看看 Supporting Files/main.m檔案,這個大家一看就知道是整個應用的入口

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
可以看到當我們的iOS應用執行的時候首先會執行UIApplication的UIApplicationMain方法,這個方法首先會建立UIApplication例項(這個和Android中的Application類似,是一個單例模式,整個應用程式只有一個例項,所以它的生命週期和我們的應用生命週期一致),接下來會在這裡迴圈管理和處理應用事件。同時也會建立一個UIApplicationDelegate類的例項。該類是UIApplication的代理類,在該類中處理UIApplication委託的各種事件響應。

下面我們開啟工程中的AppDelegate.h和AppDelegate.m檔案

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end
可以看到改代理類持有一個UIWindow的例項(屬性)
#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end
在實現中有6個方法,分別在應用程式的各個生命週期中呼叫。比如didFinishLaunchingWithOptions方法在應用程式載入完成後呼叫。

工程中的ViewController就是MVC中的控制器,檢視就是screen.xib檔案和storyboard中的介面。這裡的ViewController繼承自UIViewController相當於Android中的Activity,用來控制檢視和模型的互動。


檢視控制器並不是檢視層的一部分,也不是介面中的元素,他管理者檢視層的物件,並提供互動行為,如果有多個介面,我們就要為每一個介面定義一個檢視控制器。

摘自官方文件 : “您還可以使用檢視控制器來轉換各種型別的內容。由於 iOS 應用程式顯示內容的空間很有限,因此檢視控制器提供了所需要的基礎結構,可讓您移除一個檢視控制器的檢視,替換為另一個檢視控制器中的檢視。通過讓檢視控制器檔案與串聯圖中的檢視進行通訊,可以定義應用程式中的互動方式。方法是通過 Action 與 Outlet 來定義串聯圖與原始碼檔案之間的連線。” 

下面通過一個簡單的例項,我們就可以看到Action和Outlet的使用了。

二、拖放UI元件

開啟Main.storyboard向其中拖放元件元素。


上面用到了 UITextField、UILabel、UIButton,有關這些元件的詳細配置我覺得對於做過Android開發的朋友真心沒必要花過多時間。

三、監聽Button事件

ViewController.h  (第6行程式碼)

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

//宣告一個方法來監聽按鈕點選 IBAction === void
- (IBAction)btnOnClick;

@end
ViewController.m  (第15-17行程式碼)
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark 監聽按鈕點選
- (void)btnOnClick{
    NSLog(@"按鈕被人點選了");
}

@end

按住control鍵,拖動Button到右邊的 -(IBActon)btnOnClick處建立連線。

command+R執行觀察結果,點選按鈕會發現控制檯打印出了Log

2015-03-14 11:10:11.820 第一個iOS程式[12810:142497] 按鈕被人點選了
2015-03-14 11:10:12.004 第一個iOS程式[12810:142497] 按鈕被人點選了

四、獲取文字框物件

我們要獲取文字物件,先要將文字物件作為ViewController的一個屬性(第9、10行)

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

//宣告一個方法來監聽按鈕點選 IBAction === void
- (IBAction)btnOnClick;

//宣告兩個屬性用來儲存2個文字輸入框
@property (nonatomic, weak) IBOutlet UITextField *num1;
@property (nonatomic, weak) IBOutlet UITextField *num2;

@end
用同樣的方法(按住control鍵拖動我們的文字物件建立連線),這樣我們就可以取得文字物件的內容了
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark 監聽按鈕點選
- (void)btnOnClick{
    NSLog(@"按鈕被人點選了");
    
    UITextField *textField1 = self.num1;
    UITextField *textField2 = self.num2;
    
    NSString *text1 = textField1.text;
    NSString *text2 = textField2.text;
    
    NSLog(@"文字1 = %@, 文字2 = %@", text1, text2);
    
}

@end
command + R ,在文字框內輸入後點擊按鈕

控制檯輸出:

2015-03-14 11:33:07.342 第一個iOS程式[14531:166271] 按鈕被人點選了
2015-03-14 11:33:07.343 第一個iOS程式[14531:166271] 文字1 = 12, 文字2 = 34

五、完成計算功能

用同樣的方法新增UILabel的屬性

#pragma mark 監聽按鈕點選
- (void)btnOnClick{
    NSLog(@"按鈕被人點選了");
    
    UITextField *textField1 = self.num1;
    UITextField *textField2 = self.num2;
    
    NSString *text1 = textField1.text;
    NSString *text2 = textField2.text;
    
    NSLog(@"文字1 = %@, 文字2 = %@", text1, text2);
    
    double num1 = [text1 doubleValue];
    double num2 = [text2 doubleValue];
    
    double sum = num1 + num2;
    
    NSLog(@"文字和 = %f", sum);
    
    UILabel *resultLabel = self.result;
    
    resultLabel.text = [NSString stringWithFormat:@"%f", sum];
    
}

我們會發現輸出結果後面是三個點,這個是因為我設定了長度超出省略,可以設定Line Breaks 為 Clip(截斷)

最後再提一句:Objective-C是iOS的基石(核心)所以希望深入研究iOS開發的朋友建議加深對OC的學習,可以參考我的另外一個系列部落格《Objective-C基礎筆記

相關推薦

iOS成長筆記1——一個iOS應用

前言:陽光小強最近抽時間學習iOS開發,在學習過程中發現了很多有趣的東西也遇到了很多問題,為了在學習過程中能和大家交流,記錄下學習的心得和學習成果,所以就有了這一個系列文章,希望這一系列文章能形成一個系統性的東西,讓和我一樣剛步入iOS開發的朋友少走彎路,用最少的時間獲得最大

iOS應用開發入門1——一個iOS應用

最近因為工作的原因,需要學習iOS應用開發。 本人現在在公司負責的是智慧裝置聯網模組,所謂的智慧裝置聯網,就是讓一些智慧裝置(多半是沒用螢幕的裝置)連上wifi,因為沒有螢幕,所以無法像手機和平板那樣通過螢幕選擇wifi和輸入wifi密碼,這個時候就需要手機來輔助,將手機上

叔的Linux私房】學習筆記1——Linux系統入門

雖然現在工作一直在用Xshell 一些 基本的命令、常用的還可以, 但總感覺對Linux瞭解的知之甚少,偶爾改個檔案還需要請教同事,真是慚愧。 所以決定從今天開始重新學習下Linux,查漏補缺,並將學習的結果作為筆記和大家一塊交流和進步,就開始我們今天的學習吧。 一

成長十三----- 草草啟程,半途終了?

下一步 後臺 十分鐘 一道 一是 算法題 ceo 奮鬥 同時   來北京兩個多月了,也在現在這家遊戲公司上了一個多月的班了,對於目前自己這狀態真的是撞墻的心都有了。我不知道我到底是怎麽了,一念清醒九念操蛋,心裏面清楚的知道自己應該做什麽,不應該做什麽,但是就是怎麽也控制不住

Unity5權威講解之讀書筆記

    Unity5權威講解之菜鳥讀書筆記(四) 16.Mecanim動畫系統 動畫型別 型別 特徵 Legacy Unity4.0

Unity5權威講解之讀書筆記

   Unity5權威講解之菜鳥讀書筆記(三) 11. Rigidbody 元件是模擬碰撞等物理效果的重要元件,具備以下屬性,如表所示。 屬性 含義 Mass

Unity5權威講解之讀書筆記

Unity5權威講解之菜鳥讀書筆記(二) 本章製作遊戲主人公角色,並學習遊戲物件和元件之間的關係,學會如何實現遊戲角色的移動邏輯,從而瞭解指令碼的使用方法。 6.將用於遊戲的3D模型放置於場景檢視有兩種方法,一是直接使用相應的3D模型,二

Unity5權威講解之讀書筆記

  Unity5權威講解讀書筆記(一) 0. Emmm.這本書自我感覺很適合我這個菜鳥來讀,主要講解了如何製作第三人稱的射擊遊戲(fps),同時介紹遊戲開發的必備技巧和技術,實用性很強有種深入淺出的感覺..... 1.資源會

React-學習筆記

  新公司的專案前端架構用的是react.js 之前孤陋寡聞並沒聽說過,想著後期開發和維護多少要會點前端的東西,就簡單研究一下。個人的學習習慣能寫程式碼的就不寫文字,必要的地方加兩行註釋,程式碼一行行敲下去,執行過有問題及時發現,存檔當作日後小問題備查的工具。感覺前端尤如玄學,標點啥的處處要留心,

React-學習筆記

  這篇新穎的東西是React的元件的封裝和引用   <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Hello React!<

thinkphp學習筆記

開始寫學習筆記,不給別人看,只是為了紀錄,畢竟不是所有看過的內容都能用的熟練,紀錄下有用的碎片,需要時還可以翻看翻看 thinkphp環境配置 windows下配置什麼的都不說了,原生配置容易,wamp或者什麼appserv之類的活著xampp都可以,配置極簡,就是穩定

Python從到高手1:初識Python

1 Python簡介 1.1 什麼是Python   Python是一種面向物件的解釋型計算機程式設計語言,由荷蘭人吉多·範羅蘇姆(Guido van Rossum)於1989年發明,第一個公開發行版發行於1991年。目前Python的最新發行版是Pyt

javascript高階程式設計讀書筆記1 1章 JavaScript 簡介

第 1章 JavaScript 簡介 1.1 JavaScript 簡史 1.2 JavaScript 實現 一個完整的 JavaScript 實現應該由下列三 個不同的部分組成(見圖 1-1)。  核心(ECMAScript)  文件物件模型(DOM)

java程式設計師進階分享一個爬取B2B網站資訊的程式

      前段時間,女朋友如願以償的找到了銷售的工作,第一天正式上班還挺高興,第二天就開始愁眉苦臉了。就是因為他這銷售實在是太麻煩,以後每天要到一些B2B網站去找一些客戶資訊,每天要找幾百條,剛開始我還安慰的說,沒事,以後我幫你找,我接手這工作第一天還很老實,第一天用了不到一個小時的時間幫忙找了八十條,但到

吳恩達Andrew Ng《機器學習》課程筆記11周——機器學習簡介,單變數線性迴歸

吳恩達(Andrew Ng)在 Coursera 上開設的機器學習入門課《Machine Learning》: 目錄 一、引言 一、引言 1.1、機器學習(Machine Learni

IOS 初級開發入門教程一個HelloWorld工程及StoryBoard使用

前言 在IOS開發之路的博文第一章:(IOS開發入門介紹http://blog.csdn.net/csdn_aiyang)我大致系統介紹了有關IOS的一些基礎認識,如果不完全都記住沒關係,以後我們開發之路還很長,慢慢的自然而然就明白是怎麼回事了。這一篇我將手把手教大家完成第

Spring Boot 學習筆記一個 Spring boot 程式

  SpringBoot程式建立方式  1、建立一個Spring boot專案      1) 可以採用方式一: 使用 eclipse 的 Spring Tool Suite (STS) 外掛/或者 IDEA 自帶的外掛建立;    

C++筆記一個c++程式

//myfirst.cpp /* #include預處理操作,意思是把標頭檔案的內容包含到此檔案中。 iostream是包含檔案,也叫標頭檔案. C中標頭檔案一般有後綴h,而純粹的C++則沒有,C++支援帶有後綴h的標頭檔案。 */ #include <

java學習1 一個java小程式執行解釋

上一篇文章簡單運行了一個java的小程式,其中有兩個命令一個是javac另一個是java。簡單解釋一下這兩個命令的作用,如有不正確的地方請大家多多指教。 javac是java的編譯命令,通過javac編譯原始檔後會生成**.class檔案,這是一種與平臺無關的

JavaWeb一個 WEB 應用程序

webapps ima show 資源 部署 目錄 層次 apt 分享 1、Web程序結構 一個 web 應用程序是由一組 Servlet,HTML 頁面,類,以及其它的資源組成的運行在 web 服務器上的完整的應用程序,以一種結構化的有層次的目錄形式存在。 組成 web