開始用Swift開發(fā)iOS 10 - 10 Navigation Controller的介紹和Segue

接著上一篇開始用Swift開發(fā)iOS 10 - 9 Table Row的刪除, UITableViewRowAction和UIActivityViewController的使用的代碼桶良,繼續(xù)學(xué)習(xí)Navigation Controller和Segue。

創(chuàng)造Navigation Controller

  • 選中Restaurant Table View Controller然后點(diǎn)擊菜單欄中的Editor > Embed in > Navigation Controller沮翔;生成了新的一Scene(Navigation Controller Scene)陨帆。
  • 選中之前Scene中的Navigation bar,修改其titleFood Pin采蚀。

添加 Detail View Controller

之前添加導(dǎo)航欄疲牵,現(xiàn)在添加另一個(gè)view controller,用來顯restaurant的詳細(xì)內(nèi)容榆鼠。

  • 拖動(dòng)一個(gè)新的View Controller纲爸。
  • 拖動(dòng)一個(gè)image View,調(diào)整合適大小妆够,并添加相關(guān)約束识啦。Content Mode屬性修改為 Aspect Fill
  • 用segue連接prototype cell和detail scene责静。 Ctrl-drag從prototype cell到detail scene袁滥。如果不方便選擇prototype cell盖桥,可以在document outline中拖動(dòng)灾螃。選擇Show連接風(fēng)格。
  • iOS 10中有幾種sugue類型:

    • Show:新的view controller將被添加view controller棧的頂部揩徊。跳轉(zhuǎn)的頁面有Navigation bar腰鬼,并且有返回原來頁面的返回按鈕嵌赠。這是非常常用的的類型。
    • Show detail:在view controller棧中熄赡,新的view controller將被替代原來的view controller姜挺。跳轉(zhuǎn)的頁面沒有Navigation bar,也沒有返回原來頁面的返回按鈕彼硫。
    • Present modally:新頁面將以動(dòng)畫形式從底部出現(xiàn)到覆蓋整個(gè)手機(jī)屏幕炊豪。這種形式最常見的列子是iOS自帶的日歷應(yīng)用:
    • Present as popover:以帶有箭頭錨點(diǎn)的彈框顯示。通常使用的iPad應(yīng)用中
  • 不再需要action sheet拧篮,去除tableView(_:didSelectRowAt:)方法

  • 創(chuàng)建新類文件RestaurantDetailViewController词渤,繼承至UIViewController。是新建scene與RestaurantDetailViewController的聯(lián)系串绩。

  • RestaurantDetailViewController中加入一個(gè)outlet和一個(gè)變量缺虐,outlet關(guān)聯(lián)Image View,restaurantImage用與接受table view傳來的圖像名稱數(shù)據(jù)礁凡。

    @IBOutlet var restaurantImageView:UIImageView!
    var restaurantImage = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        restaurantImageView.image = UIImage(named: restaurantImage)
    }

通過segues傳遞數(shù)據(jù)

segue管理view controller之間的過渡高氮。當(dāng)segue觸發(fā)時(shí),storyboard會(huì)通知源view controller(如RestaurantTableViewController)調(diào)用方法prepare(for:sender:)顷牌,可以通過此方法傳遞數(shù)據(jù)剪芍。

  • 當(dāng)storyboard中結(jié)構(gòu)復(fù)雜時(shí),segue可能會(huì)有很多韧掩,同一個(gè)view controller可能與各級(jí)view controller之間有segue紊浩,這種情況最好給segue一個(gè)唯一identifier。設(shè)置segue的identifier為 showRestaurantDetail疗锐。

  • RestaurantTableViewController中添加prepareForSegue:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showRestaurantDetail" {
            if let indexPath = tableView.indexPathForSelectedRow {
                let destinationController = segue.destination as! RestaurantDetailViewController
                destinationController.restaurantImage = restaurantImages[indexPath.row]
            }
        }
    }

為詳情頁面添加三個(gè)標(biāo)簽

  • 添加三個(gè)標(biāo)簽坊谁,Text分別為NameLocation滑臊,Type(注意:雖然Text會(huì)被替代口芍,但不要開始留空,因?yàn)榱艨諘?huì)使之后生成stack view時(shí)雇卷,大小不確定)鬓椭;三個(gè)label生成一個(gè)stack view,調(diào)整字體和大小关划,添加適當(dāng)?shù)募s束小染。
  • 添加三個(gè)outlet,和三個(gè)與之對(duì)應(yīng)的變量贮折。
    @IBOutlet var nameLabel: UILabel!
    @IBOutlet var locationLabel: UILabel!
    @IBOutlet var typeLabel: UILabel!
    
    var nameText = ""
    var locationText = ""
    var typeText = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()

        restaurantImageView.image = UIImage(named: restaurantImage)
        nameLabel.text = nameText
        locationLabel.text = locationText
        typeLabel.text = typeText
    }
  • 修改RestaurantTableViewController中的prepareForSegue方法:
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showRestaurantDetail" {
            if let indexPath = tableView.indexPathForSelectedRow {
                let destinationController = segue.destination as! RestaurantDetailViewController
                destinationController.restaurantImage = restaurantImages[indexPath.row]
                destinationController.nameText = restaurantNames[indexPath.row]
                destinationController.locationText = restaurantLocations[indexPath.row]
                destinationController.typeText = restaurantTypes[indexPath.row]
            }
        }
    }

代碼

Beginning-iOS-Programming-with-Swift

說明

此文是學(xué)習(xí)appcode網(wǎng)站出的一本書 《Beginning iOS 10 Programming with Swift》 的一篇記錄

系列文章目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市调榄,隨后出現(xiàn)的幾起案子踊赠,更是在濱河造成了極大的恐慌呵扛,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筐带,死亡現(xiàn)場(chǎng)離奇詭異今穿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伦籍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門蓝晒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帖鸦,你說我怎么就攤上這事拔创。” “怎么了富蓄?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵剩燥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我立倍,道長(zhǎng)灭红,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任口注,我火速辦了婚禮变擒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寝志。我一直安慰自己娇斑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布材部。 她就那樣靜靜地躺著毫缆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乐导。 梳的紋絲不亂的頭發(fā)上苦丁,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音物臂,去河邊找鬼旺拉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棵磷,可吹牛的內(nèi)容都是我干的蛾狗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼仪媒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼沉桌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蒲牧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赌莺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冰抢,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年艘狭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挎扰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巢音,死狀恐怖遵倦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情官撼,我是刑警寧澤梧躺,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站傲绣,受9級(jí)特大地震影響掠哥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秃诵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一续搀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菠净,春花似錦禁舷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攀唯,卻和暖如春霜大,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背革答。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工俭驮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛇尚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像速那,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子力九,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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