編寫一個護(hù)照App吧~第五章練習(xí)Passport

在這章練習(xí)叫做Passport,Passport是一個非常簡單的應(yīng)用泄伪,展示個人的名字、生日立润、國籍和照片(圖5-1)狂窑。Passport還提供各種國家供你選擇,顯示曾經(jīng)去過哪些國家桑腮。這個練習(xí)將會在下一章中繼續(xù)使用泉哈。

圖5-1

Exercise: Passport | Page 143

打開Xcode吧,點擊頂部菜單欄的File -> New -> Project(見圖5-2)破讨。

圖5-2

從模板中選擇Single View Application丛晦,點擊Next(見圖5-3)。

圖4-3

Page 144 | Chapter 5 : Building Multiscreen Apps

在Product Name一欄輸入Passport提陶,Language選擇Swift烫沙,Devices選擇iPhone(見圖5-4),點擊Next隙笆。

圖5-4

把工程保存到某個文件夾中(見圖5-5)锌蓄。

圖5-5

Exercise: Passport | Page 145

出現(xiàn)了工程的詳細(xì)信息界面(見圖5-6)。不勾選Landscape Left和Landscape Right這個兩個方向撑柔,然后打開Main.storyboard(見圖5-7)瘸爽。

圖5-6
圖5-7

Page 146 | Chapter 5 : Building Multiscreen Apps

點擊Inspector上工具欄中第一個圖標(biāo)File Inspector,看起來像是一張紙折了一個角铅忿。

鼠標(biāo)移動到到中間部分剪决,不勾選Use Auto Layout選項。這時會出現(xiàn)一個對話框檀训,選擇iPhone柑潦。然后不勾選Disable Size Classes。這時肢扯,Storyboard中的界面形狀會改變(見圖5-8和圖5-9)妒茬。

Exercise: Passport | Page 147

圖5-8
圖5-9

選中這個界面,然后點擊頂部菜單欄的Editor -> Embed In -> Navigation Controller蔚晨。

Page 148 | Chapter 5 : Building Multiscreen Apps

一個新的scene會增加到Storyboard中乍钻,Navigation Controller Scene(見圖5-10)。一個scene表示App一屏或者一個界面铭腕。Navigation Controller Scene和之前的View Controller Scene是連接在一起的银择,這連接說明View Controller Scene是Navigation Controller Scene里第一個出現(xiàn)視圖,點擊Storyboard Editor左下角的盒子按鈕打開Document Outline累舷,Document Outline顯示了storyboard文件中所有的控件以及控件所處的層次等級浩考。接著把Project Navigator隱藏起來(見圖5-11)。

圖5-10
圖5-11

Exercise: Passport | Page 149

View Controller Scene的頂部有個灰色的方塊被盈,這就是navigation bar析孽。雙擊搭伤,然后輸入Passport,敲擊回車袜瞬。

在Inspector中間打開Object Library怜俐,在搜索框中輸入Image View(見圖5-12)。

圖5-12

把Image View拖到View Controller界面的中間邓尤,然后打開Size Inspector(見圖5-13)拍鲤。

圖5-13

Page 150 | Chapter 5 : Building Multiscreen Apps

X一欄輸入48,Y一欄輸入70汞扎,Width一欄輸入225季稳,Height一欄輸入225。然后不勾選Autoresizing中的兩個相交的剪頭(見圖5-14)澈魄。

圖5-14

然后拖一個Label控件景鼠,放在Image View的左下方,然后再放兩個Label控件一忱。選中這三個Label控件莲蜘,打開Attribute Inspector,在font一欄中有個帶有字母T的方格帘营,點擊這個方格票渠,彈出菜單,選擇System Bold(見圖5-15)芬迄,點擊Done问顷。

Exercise: Passport | Page 151

把每個Label的寬調(diào)整到100pts以上,然后把3個Label控件的文字改為:Name禀梳,Birthday杜窄,Nationality(見圖5-15)。

圖5-15

Page 152 | Chapter 5 : Building Multiscreen Apps

然后再添加3個Label算途,放在右側(cè)塞耕,對齊方式改為右對齊。在Attribute Inspector中嘴瓤,有個Alignment屬性扫外,可在這里找到右對齊的圖標(biāo),點擊圖標(biāo)即可修改為右對齊廓脆。寬度調(diào)整到1100pts以上筛谚,然后雙擊修改文字(見圖5-16)。

圖5-16

找到一張你自己的照片停忿,然后點擊頂部菜單File -> Add Files to Passport(見圖5-17)驾讲。找到你的照片,然后勾選Copy Items if needed,選擇圖片文件吮铭,點擊Add时迫。回到Storyboard中來谓晌,點擊Image View别垮,然后點擊Attribute Inspector中的Image下拉菜單,選中剛剛添加的照片(見圖5-18)扎谎。

圖5-17
圖5-18

Exercise: Passport | Page 153

圖片可能看起會有拉伸變形,點擊Attribute Inspector中的Mode下拉菜單可以修復(fù)這個問題烧董。選擇Aspect Fill毁靶,這樣會保證圖片的寬高比不會變化,現(xiàn)在Image View中的圖片看起來好多了逊移。

從Object Library中拖拽一個Button控件预吆,放在個人信息的下方(就是3+3個Label控件的下方)。雙擊Button控件胳泉,命名為Show Countries(見圖5-19)拐叉。當(dāng)點擊這個Button時,App會展示一個國家清單扇商。

圖5-19

Page 154 | Chapter 5 : Building Multiscreen Apps

這個國家清單是由table view來處理凤瘦,蘋果提供了UITableViewController這個控制器來專門與table view視圖協(xié)調(diào)工作。從Object Library中拖拽一個Table View Controller案铺,放到Passport Scene旁邊蔬芥。

接著選中Show Countries這個Button控件,同時按住Control鍵控汉,鼠標(biāo)拖拽到table view controller上(見圖5-20)笔诵,然后松開鼠標(biāo)。

圖5-20

Exercise: Passport | Page 155

這時會彈出一個窗口(見圖5-21)姑子,選擇push乎婿,然后在兩個Scene之間出現(xiàn)了一條線。

圖5-21

而且Table View Controller Scene中有了navigation bar街佑,雙擊這個navigation bar然后輸入Countries Visited找爱。

然后點擊Prototype Cells下方的空白方格,接著打開Attribute Inspector志衣,在Identifier后面輸入reuseIndentifier(見圖5-22)缘回。

圖5-22

這個App的storyboard部分已經(jīng)完成了。現(xiàn)在需要創(chuàng)建table view controller文件希俩。選擇頂部菜單的File -> New -> File(見圖5-23)吊宋。確保Source是在iOS下,選擇Cocoa Touch Class,點擊Next璃搜。

圖5-23

Page 156 | Chapter 5 : Building Multiscreen Apps

Subclass of一欄選擇UITableViewController拖吼,Class一欄輸入CountriesTableViewController,不勾選Also create .xib这吻,語言是Swift(見圖5-24)吊档。點擊Next。

圖5-24

Exercise: Passport | Page 157

然后選擇文件保存地點唾糯,已經(jīng)自動選擇了當(dāng)前工程所在的文件夾怠硼,確保Passport文件夾在最上方(見圖5-25),然后點擊Create移怯。

圖5-25

剛剛創(chuàng)建的CountriesTableViewController.swift文件已經(jīng)自動在Xcode中打開了香璃。

然后選中所有綠色的代碼,刪掉它們舟误。注意不要一不小心刪掉最底部的那個右大括號葡秒。viewDidLoad和didReceiveMemoryWarning中的綠色代碼也刪掉。然后隱藏Inspector嵌溢,打開Project Navigator眯牧。

把鼠標(biāo)光標(biāo)放到class CountriesTableViewController: UITableViewController這行代碼的下方,我們在這里創(chuàng)建變量屬性赖草,去過的國家應(yīng)該是存儲在數(shù)組當(dāng)中学少,任何方法都可以訪問數(shù)組,請輸入下列代碼:

var countries = ["Italy","Norway","England"]

numberOfSectionsInTableView方法確定table view中顯示多少個section秧骑,把數(shù)字改為1旱易,刪掉這行//#warningPotentially incomplete method implementation,見下方:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    //Return the number of sections.
    return 1
}

Page 158 | Chapter 5 : Building Multiscreen Apps

在 numberOfSectionsInTableView方法下面腿堤,還有一個numberOfRowsInSection方法阀坏,numberOfRowsInSection這個方法確定table view中顯示多少行,把數(shù)字改成3笆檀,刪掉這行//#warningPotentially incomplete method implementation忌堂,見下方:

override func tableView(tableView: UITableView, numberOfRowsInSection section:Int) -> Int {
     //Return the number of sections.
    return 3
}

把鼠標(biāo)光標(biāo)放到這兩個方法下面,然后輸入tableView酗洒,會自動出現(xiàn)一些代碼士修,這是自動補全功能,幫助你更快的輸入代碼樱衷,找到下面這行代碼:

tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

然后敲擊回車棋嘲,刪掉代碼占位符。

tableview中的每一行都會調(diào)用cellForRowAtIndexPath方法矩桂,在這個方法中我們創(chuàng)建UITableViewCell沸移,然后每一行都會顯示我們想顯示的內(nèi)容。在方法中添加下列代碼:

let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier",  forIndexPath: indexPath) as! UITableViewCell

這行代碼創(chuàng)建了一個名為cell的常量,等號后面是tableView中可回收的cell雹锣,這個方法用來檢查使用已經(jīng)有了一個可回收的cell网沾,且其identifier為reuseIdentifier。如果有這個cell蕊爵,那么讓cell可回收辉哥;反之,創(chuàng)建一個新的cell攒射。接著添加下列代碼:

var country = countries[indexPath.row]

這行代碼把國家名字賦值給了country這個變量醋旦。table view中的每一行都會調(diào)用cellForRowAtIndexPath這個方法,每次被調(diào)用会放,indexPath變量會更新浑度,然后提供最新的section和row number。例如鸦概,cellForRowAtIndexPath第一次被調(diào)用的時候,是第一section第一行甩骏,接著是第一section第二行窗市,然后是第一section第三行,繼續(xù)直到遍歷完所有的section所有的行饮笛。indexPath.row用來提取數(shù)組中的第一個第二個和第三個國家咨察。

接著添加下列代碼:

cell.textLabel.text = country

這行代碼把coutry變量的值賦值給了UITableViewCell的text屬性,這樣福青,國家名字將會展示在每行中摄狱。

Exercise: Passport | Page 159

添加最后一行代碼:

return cell

應(yīng)用幾乎快要完成了,然而還需要修改Storyboard中的一些設(shè)置无午。打開Main.storybaord媒役,然后打開Inspector。

接著點擊Table View Controller Scene宪迟,接著選中Table View Controller Scene上方的黃色圓圈酣衷,選中后一個藍(lán)色框會包裹住黃色圓圈,打開Identity Inspector次泽,從左數(shù)第三個圖標(biāo)穿仪,看起來像是張報紙,在Class一欄中選擇CountriesTableViewController(見圖5-26)

圖5-26

這個操作會把CountriesTableViewController.swift和Table View Controller Scene連起來∫饣纾現(xiàn)在應(yīng)用已經(jīng)編寫完成了啊片,保存你的操作,然后點擊左上角的Paly按鈕(或者快捷鍵Command+R)玖像。

App啟動后會展示姓名生日國籍和照片(見圖5-27)紫谷。點擊Show Countries按鈕,navigation controller會自動push一個新的view controller到最前面。

Page 160 | Chapter 5 : Building Multiscreen Apps

圖5-27

每一個cell都顯示一個不同的國家(見圖5-28)碴里。左上角的back(返回按鈕)是自動生成的沈矿,文字顯示的是之前界面的title,如果之前的界面沒有title咬腋,就會顯示Back羹膳。點擊Back這個按鈕。

Exercise: Passport | Page 161

圖5-28
**個人挑戰(zhàn):** 如果你想讓這個App能夠展示5個國家根竿,你需要做哪些改動呢陵像?展示10個呢?或者1000個國家寇壳?

如果App沒有按照你想要的結(jié)果運行醒颖,或者程序有了錯誤或警告,不要太擔(dān)心壳炎,學(xué)習(xí)的最佳方式就是試錯泞歉,熟能生巧,到我們的網(wǎng)站上下載示例代碼匿辩,對比一下代碼腰耙,多試幾次,直到搞定這個程序為止铲球。

Page 162 | Chapter 5 : Building Multiscreen Apps

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挺庞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子稼病,更是在濱河造成了極大的恐慌选侨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件然走,死亡現(xiàn)場離奇詭異援制,居然都是意外死亡,警方通過查閱死者的電腦和手機芍瑞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門隘谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啄巧,你說我怎么就攤上這事寻歧。” “怎么了秩仆?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵码泛,是天一觀的道長。 經(jīng)常有香客問我澄耍,道長噪珊,這世上最難降的妖魔是什么晌缘? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮痢站,結(jié)果婚禮上磷箕,老公的妹妹穿的比我還像新娘。我一直安慰自己阵难,他們只是感情好岳枷,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呜叫,像睡著了一般空繁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朱庆,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天盛泡,我揣著相機與錄音,去河邊找鬼娱颊。 笑死傲诵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箱硕。 我是一名探鬼主播拴竹,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颅痊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起局待,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤斑响,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钳榨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舰罚,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年薛耻,在試婚紗的時候發(fā)現(xiàn)自己被綠了营罢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡饼齿,死狀恐怖饲漾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缕溉,我是刑警寧澤考传,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站证鸥,受9級特大地震影響僚楞,放射性物質(zhì)發(fā)生泄漏勤晚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一泉褐、第九天 我趴在偏房一處隱蔽的房頂上張望赐写。 院中可真熱鬧,春花似錦膜赃、人聲如沸挺邀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悠夯。三九已至,卻和暖如春躺坟,著一層夾襖步出監(jiān)牢的瞬間沦补,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工咪橙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夕膀,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓美侦,卻偏偏與公主長得像产舞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菠剩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容