Start Developing iOS Apps (Swift)->構(gòu)建基礎(chǔ)UI(一)

本課會(huì)讓你熟悉Xcode,這個(gè)讓你寫程序的工具。你將熟悉項(xiàng)目在Xcode中的結(jié)構(gòu),并且學(xué)會(huì)如何在基礎(chǔ)項(xiàng)目組件間導(dǎo)航并使用它們。在本課中,你將為FoodTracker應(yīng)用開始制作一個(gè)簡(jiǎn)單的用戶界面(UI)并在模擬器中顯示它。

當(dāng)你完成時(shí),你的應(yīng)用看起來會(huì)像下面這樣:


學(xué)習(xí)目標(biāo)

在本課結(jié)束的時(shí)候,你將學(xué)到:

- 在Xcode中創(chuàng)建一個(gè)項(xiàng)目

- 識(shí)別使用Xcode項(xiàng)目模版創(chuàng)建的關(guān)鍵文件的目的

- 打開和切換項(xiàng)目中的文件

- 在iOS模擬器上運(yùn)行應(yīng)用

- 在storyboard中添加、移動(dòng)UI元素,并改變它的大小

- 在storyboard中使用屬性檢查器編輯UI元素的屬性

- 使用大綱(outline)視圖查看和重排UI元素。

- 利用助手編輯器的預(yù)覽模式預(yù)覽storyboard上的UI

- 使用Auto Layout讓UI能夠自動(dòng)適應(yīng)用戶的設(shè)備尺寸


創(chuàng)建一個(gè)新項(xiàng)目

Xcode包含多種為開發(fā)常見類型的iOS應(yīng)用而準(zhǔn)備的內(nèi)建模版,例如games、tab導(dǎo)航的應(yīng)用、表視圖基礎(chǔ)的應(yīng)用。大多數(shù)的模版都預(yù)設(shè)了界面和源代碼文件。本課,你將使用最基礎(chǔ)的模版:Single View Application。

要?jiǎng)?chuàng)建一個(gè)新項(xiàng)目

1. ?從應(yīng)用程序目錄中打開Xcode

如果這是你第一次啟動(dòng)Xcode, 它會(huì)問你是否同意用戶協(xié)議,并下載額外的組件。按照這些屏幕提示操作,直到Xcode設(shè)置完成并準(zhǔn)備啟動(dòng)。一旦Xcode啟動(dòng)完成,歡迎窗口就會(huì)出現(xiàn)。


如果項(xiàng)目窗口代替歡迎窗口出現(xiàn),別擔(dān)心,也許之前在Xcode中創(chuàng)建或者打開了一個(gè)項(xiàng)目。就使用下面步驟中的菜單項(xiàng)來創(chuàng)建項(xiàng)目。

2. 在歡迎窗口,點(diǎn)擊“Create a new Xcode Project” (或者選擇 File > New > Project)。Xcode打開一個(gè)新窗口,顯示一個(gè)讓你選擇模版的對(duì)話框。

3. 在對(duì)話框的頂部選擇iOS。

4. 在Application區(qū)域,選擇Single View Application,然后點(diǎn)擊Next。


5. 在出現(xiàn)的對(duì)話框中,使用下面的值來命名你的應(yīng)用,并為項(xiàng)目選擇額外的選項(xiàng):

- Product Name: FoodTrackerXcode。使用你填寫的產(chǎn)品名命你的項(xiàng)目和應(yīng)用。

- Team:如果沒有自動(dòng)填充,則寫None。

- Organization Name: 你的組織名或者你自己的名字。這一項(xiàng)也可以空著。

- Organization Identifier:如果有,就寫。如果沒有,就寫com.example。

- Bundle Identifier:這個(gè)值根據(jù)產(chǎn)品名和組織標(biāo)識(shí)符自動(dòng)生成。

- Language: Swift

- Devices: Universal。一個(gè)通用的應(yīng)用可以運(yùn)行在iPhone以及iPad上。

- Using Core Data: Unselected.

- Include Unit Tests: Selected.

- Include UI Tests: Unselected.


6. 點(diǎn)擊Next。

7. 在出現(xiàn)的對(duì)話框中,選擇一個(gè)位置來存儲(chǔ)你的項(xiàng)目,然后點(diǎn)擊Create。Xcode在workspace window中打開新項(xiàng)目。


在workspace窗口中,你或許會(huì)看到一個(gè)錯(cuò)誤圖標(biāo),它的信息顯示“Singing for FoodTracker requires a development team.” 這個(gè)信息的意思是你沒有為iOS開發(fā)設(shè)置好Xcode。不過不用擔(dān)心,完成本課不需要這個(gè)。讓應(yīng)用運(yùn)行在模擬器上,你不需要開發(fā)team。

進(jìn)一步探索

在iOS設(shè)備上運(yùn)行應(yīng)用之前,你需要設(shè)置一個(gè)有效的team,這樣該應(yīng)用才可以被簽名。如果你是蘋果開發(fā)者計(jì)劃的成員,無論是個(gè)人還是成員組織中的一員,你都可以在這里選擇team。否則,你的Apple ID會(huì)被當(dāng)作個(gè)人team,使得你能在設(shè)備上運(yùn)行應(yīng)用。不過,在你向App Store提交應(yīng)用之前,你需要加入蘋果開發(fā)者計(jì)劃。更多信息,選擇Help > Xcode Help, 并搜索“Singing workflow”。

熟悉Xcode

Xcode包含了你創(chuàng)建應(yīng)用所需的一切。它組織那些創(chuàng)建應(yīng)用的文件和資源。它為代碼和用戶界面提供編輯器。還有,Xcode讓你構(gòu)建、運(yùn)行、和調(diào)試你的應(yīng)用—提供iOS設(shè)備模擬器和一個(gè)強(qiáng)大的一體化調(diào)試器。

花一點(diǎn)時(shí)間來熟悉Xcode工作空間主要部分。你將在本課程中使用以下窗口中標(biāo)識(shí)的區(qū)域。不要現(xiàn)在就去了解所有的細(xì)節(jié);每個(gè)區(qū)域的更多細(xì)節(jié)會(huì)在你用到的時(shí)候再詳述。

運(yùn)行iOS模擬器

因?yàn)槟愕捻?xiàng)目基于Xcode的模版,所以基本應(yīng)用程序環(huán)境已經(jīng)自動(dòng)設(shè)置好了。即使你不寫任何代碼,也可以在沒有任何額外的設(shè)置的情況下構(gòu)建并運(yùn)行Single View Application模版。

為了構(gòu)建并運(yùn)行應(yīng)用,使用Xcode中的iOS模擬器。模擬器讓你了解應(yīng)用在設(shè)備上運(yùn)行時(shí)的外觀和行為。

模擬器可以模擬很多種不同類型的硬件,所有不同屏幕尺寸和分辨率的iPad和iPhone,所以你可以模擬每個(gè)你想開發(fā)的設(shè)備。本課使用iPhone7選項(xiàng)。

在模擬器上運(yùn)行應(yīng)用

1. 在Xcode工具欄上選擇Scheme會(huì)彈出一個(gè)菜單,選擇iPhone 7。Scheme彈出菜單提供應(yīng)用要運(yùn)行之上的設(shè)備或模擬器的選項(xiàng)。確保你選擇的是iPhone 7 Simulator,而不是iOS device。


2. 點(diǎn)擊Xcode工具條左上角的Run按鈕。


或者,選擇Product > Run (或者,按下Command-R)。

如果你是第一次運(yùn)行應(yīng)用,Xcode會(huì)詢問是否在Mac上啟動(dòng)開發(fā)者模式。開發(fā)者模式允許Xcode訪問某些調(diào)試功能而無需輸入密碼。決定是否開啟開發(fā)者模式并按照提示進(jìn)行操作。


如果不開啟開發(fā)者模式,則稍后可能會(huì)要求你輸入密碼。本系列課程假定開啟了開發(fā)者模式。

3. 隨著構(gòu)建過程的完成,觀察Xcode工具欄。Xcode會(huì)把構(gòu)建進(jìn)程顯示在activity view中,它位于工具欄的中間位置。

Xcode構(gòu)建應(yīng)用結(jié)束后,模擬器將會(huì)自動(dòng)開啟。在第一次開啟的時(shí)候需要一些時(shí)間。

模擬器以及指定的iPhone模式打開,并啟動(dòng)應(yīng)用。初始時(shí),模擬器顯示應(yīng)用的啟動(dòng)界面,隨后它轉(zhuǎn)換到應(yīng)用的主界面。Single View Application模版在未更改的情況下,啟動(dòng)界面和主界面都是相同的。


現(xiàn)在,Single View Application 模版沒有做什么,它只是顯示了一個(gè)白屏。其他模版有更為復(fù)雜的行為。在你擴(kuò)展模版的功能將之運(yùn)用到應(yīng)用上之前,理解它的用途是很重要的。沒有任何修改的在模擬器中運(yùn)行應(yīng)用是開始理解開發(fā)的好方式。

通過選擇Simulator -> Quit Simulator (或者按 Command-Q)退出模擬器。

查看源代碼

Single View Application 模版有一點(diǎn)用來設(shè)置應(yīng)用環(huán)境的源代碼。首先,來看一下AppDelegate.swift文件。

查看AppDelegate.swift源碼文件

1. 在navigator區(qū)域,確保project navigator是打開的。Project navigator顯示項(xiàng)目中的所有文件。如果project navigator沒有打開,點(diǎn)擊導(dǎo)航選擇器條上最左邊的按鈕(或,選擇 View > Navigators > Show Project Navigator)。


2. 如有必要,點(diǎn)擊FoodTracker文件夾旁邊的三角,在project navigator中展開該文件夾。

3. 選擇AppDelegate.swift。Xcode在窗口的主編輯區(qū)打開這個(gè)源碼文件。

或者,雙擊AppDelegate.swift文件,它會(huì)在一個(gè)獨(dú)立窗口中打開。

App Delegate 源文件

AppDelegate.swift源文件有兩個(gè)主要功能:

- 定義AppDelegate類。App delegate 創(chuàng)建一個(gè)窗口,它用來繪制應(yīng)用的內(nèi)容,也用來對(duì)應(yīng)用中的狀態(tài)轉(zhuǎn)換做出響應(yīng)。

- 它創(chuàng)建了應(yīng)用的入口(entry point),同時(shí)創(chuàng)建了一個(gè)將事件發(fā)送給應(yīng)用的運(yùn)行循環(huán)(run loop)。這項(xiàng)工作由UIApplicationMain屬性(@UIApplicationMain)來完成,它位于文件的頂部。

使用UIApplicationMain屬性相當(dāng)于調(diào)用UIApplicationMain函數(shù),并把AppDelegate類的名稱作為代理類的名稱傳遞。作為響應(yīng),系統(tǒng)創(chuàng)建一個(gè)應(yīng)用程序?qū)ο?。?yīng)用程序?qū)ο筘?fù)責(zé)管理應(yīng)用的生命周期。系統(tǒng)也創(chuàng)建了一個(gè)AppDelegate類的實(shí)例,并且把它分配給應(yīng)用程序?qū)ο蟆W詈?,系統(tǒng)啟動(dòng)應(yīng)用。

一旦你創(chuàng)建一個(gè)新的項(xiàng)目,AppDelegate類就會(huì)自動(dòng)創(chuàng)建。除非你要做很不尋常的事,否則你應(yīng)該使用由Xcode提供這個(gè)類,用它初始化你的應(yīng)用、相應(yīng)應(yīng)用級(jí)別的事件。AppDelegate類遵守UIApplicationDelegate協(xié)議。這個(gè)協(xié)議定義了很多方法,用來設(shè)置應(yīng)用、響應(yīng)應(yīng)用的狀態(tài)改變、以及處理其他一些應(yīng)用級(jí)別的事件。

AppDelegate類包含一個(gè)唯一的屬性:window。

var window: UIWindow?

這個(gè)屬性存儲(chǔ)應(yīng)用的window的引用。這個(gè)window相當(dāng)于應(yīng)用的視圖層級(jí)的根視圖。應(yīng)用的內(nèi)容都繪制在此之上。注意,這個(gè)window屬性是一個(gè)optional,意思是有時(shí)候它可能沒有值(是nil)。

AppDelegate類也包含了下面這些委托方法的存根實(shí)現(xiàn)(stub implementation,可以理解為空實(shí)現(xiàn))。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) —> Bool

func applicationWillResignActive(_ application: UIApplication)

func applicationDidEnterBackground(_ application: UIApplication)

func applicationWillEnterForeground(_ application: UIApplication)

func applicationDidBecomeActive(_ application: UIApplication)

func applicationWillTerminate(_ application: UIApplication)

這些方法讓應(yīng)用程序?qū)ο蠛蛻?yīng)用代理之間可以進(jìn)行交流。在應(yīng)用狀態(tài)轉(zhuǎn)換期間,例如程序啟動(dòng)、轉(zhuǎn)換到后臺(tái)、應(yīng)用被終止等,應(yīng)用程序?qū)ο笳{(diào)用相應(yīng)的委托方法,給應(yīng)用程序一個(gè)做出響應(yīng)的機(jī)會(huì)。你無需做任何事來保證這些方法在正確的時(shí)刻被調(diào)用,因?yàn)檫@些工作應(yīng)用程序都幫你做了。

每個(gè)委托方法都有默認(rèn)行為。如果讓這些方法仍然空著,或者從AppDelegate類中刪除它,只要這些方法被調(diào)用的時(shí)候,這些默認(rèn)行為依然會(huì)起作用。或者,你可以添加自己的代碼到存根方法中,代碼所定義的自定義行為會(huì)在這些方法被調(diào)用的時(shí)候執(zhí)行。

模版也提供了每個(gè)存根方法的注釋。這些注釋描述了應(yīng)用程序如何使用這些方法。你可以使用這些存根方法和注釋,作為設(shè)計(jì)許多通用的應(yīng)用級(jí)別行為的藍(lán)圖。

在本課中,將不會(huì)用到自定義委托方法中的代碼,索尼你不需要改變?nèi)魏蜛ppDelegate.swift中的文件。

視圖控制器源文件

Single View Application模版還有另外一個(gè)源代碼文件:ViewController.swift。在project navigator中選擇ViewController.swift來查看它。

該文件定義了一個(gè)名為ViewController的UIViewController的子類?,F(xiàn)在,這個(gè)類只是簡(jiǎn)單的繼承了所有UIViewController定義的行為。要覆蓋或者擴(kuò)展行為,你需要重寫UIViewController定義的方法。

就像你在ViewController.swift文件中看到的那樣,模版重寫了viewDidLoad()和didReceiveMemoryWarning()兩個(gè)方法;然而,模版的存根實(shí)現(xiàn)方法還沒有做任何事,除了調(diào)用這些方法的UIViewController版本。你可以添加自己的代碼來自定義視圖控制器對(duì)這些事件的響應(yīng)。

盡管模版有didReceiveMemoryWarning()方法,但是你在本系列課程中用不到它,所以刪掉它。

就像你在ViewController.swift文件中看到的,這個(gè)模版的實(shí)現(xiàn)文件重寫了viewDidLoad()和didReceiveMemoryWarning()方法;但是,這個(gè)模版的存根實(shí)現(xiàn)方法還沒有做任何事?,F(xiàn)在,ViewController.swift的代碼看起來應(yīng)該是這個(gè)樣子:

class ViewController: UIViewController {

? ? ? ? override func viewDidLoad() {

? ? ? ? ? ? ? ? super.ViewDidLoad()

? ? ? ? ? ? ? ? // Do any additional setup after loading the view, typically from a nib.

? ? ? ? ?}

}

在h的課程中,你將會(huì)在這個(gè)源代碼文件里寫代碼。

(未完待續(xù)......)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,298評(píng)論 4 61
  • 薛卿瑤這個(gè)月來第三次了。 我想她大概是實(shí)在找不到可以話嘮的人,就選我作為嘮嗑對(duì)象。 所以她能想出來的占卜問題,一次...
    穆也閱讀 287評(píng)論 0 0
  • 每一個(gè)不曾起舞的日子,都是對(duì)生命的辜負(fù)! 第二天90天(2017-8-10月) 目標(biāo)一:備考雅思6.5 目標(biāo)二:朝...
    AMY3358閱讀 268評(píng)論 0 0
  • 程序結(jié)構(gòu) go語言標(biāo)識(shí)符區(qū)分大小寫 關(guān)鍵字:共25個(gè) 一些go內(nèi)建的常量,變量,函數(shù) Go語言通過標(biāo)識(shí)符首字母大小...
    刀刀天涯閱讀 274評(píng)論 0 0

友情鏈接更多精彩內(nèi)容