顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [Xcode][Swift3] 點擊列表開啟並傳送資料至新的頁面
時間 2017-03-11 Sat. 21:31:57


延續前一篇 [Xcode][Swift3] 使用 Alamofire 存取網站資料 - KnucklesNote板 - Disp BBS

在 Table View 中載入熱門文章列表後,
接著要在點擊某一列後,開啟新的頁面,
並將文章網址傳至新的頁面

打開 storyboard

從右下的 Object library 拉一個 View Controller 進來
[圖]


按著 Ctrl 將 HotTextCell 拉到新的 View Controller
放開後會跳出一個選單,選 Selection Segue 的 Show
[圖]


兩個頁面間會出現一個箭頭,這個連接頁面的箭頭叫做 Segue (發音為 seg-way)
點一下後在屬性檢視器的 identifier 輸入「TextRead」,之後在程式會用到
[圖]


執行看看,隨便點一篇文章就可以進到空白頁面,
按左上的回列表就可以回熱門文章頁
[圖]


回到 storyboard
點一下 View Controller,在屬性檢視器輸入 Title:「閱讀文章」
Title 會顯示在頁面上方的 Navigation Bar
[圖]



傳送資料至新的頁面

點 Command+n 新增一個 Cocoa Touch Class 檔案
Class: TextViewController
Subclass of: UIViewController
[圖]


設定 View Controller 的 Custom Class 為 TextViewController
[圖]


編輯 TextViewController.swift

在 class TextViewController: UIViewController { 這行下面加上一個成員變數
    var urlString: String!
urlString 用來接收要顯示的網址
型態後面加驚嘆號代表這個變數一旦賦值後就不會再變為 nil
所以取值的時候可以不需要先用 if 判斷或是加上驚嘆號

再來要設定點擊列表某一列時,
將文章網址傳給 TextViewController 的成員變數 urlString

編輯 HotTextViewController.swift

最後面有一個註解掉的成員函數 prepare(for:sender:)
取消註解後修改為
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // 1.
        if segue.identifier == "TextRead" {
            // 2.
            guard let textViewController = segue.destination as? TextViewController,
                let row = self.tableView.indexPathForSelectedRow?.row,
                let hotText = self.hotTextArray?[row] as? [String: Any]
                else { return }
            // 3.
            textViewController.urlString = hotText["url"] as? String
        }
    }
prepare(for:sender:) 是在 storyboard 中,
使用 segue 設定點擊後連至其他頁面時會執行的函數

1. 可能會有不同的 segue,所以要先判斷是不是之前命名為 "TextRead" 的 segue

2. 先用 guard 確保三個常數有正確取到
   textViewController 為 segue 連結到的目標 Controller
   row 為目前點選的是 tableView 的第幾列
   hotText 為第 row 列的資料

3. 取得 hotText["url"] 存至目標 Controller 的成員變數 urlString


修改 TextViewController.swift
確認一下是否有接收到列表傳來的網址

在成員函數 viewDidLoad() 裡加上
    print(self.urlString)

執行看看,點選某篇文章後,Console 視窗是否有顯示文章網址
[圖]



要使用 WebView 將網頁使用內嵌的瀏覽器顯示出來,請看下一篇:
[Xcode][Swift3] 使用 WebView 顯示網頁內容 - KnucklesNote板 - Disp BBS


--
※ 作者: Knuckles 時間: 2017-03-11 21:31:57
※ 編輯: Knuckles 時間: 2017-03-18 12:22:43
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 636 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇
看板名稱: 確定(Enter) 取消(Esc) 搜尋(Space)
查詢帳號: 確定(Enter) 取消(Esc) 搜尋(Space)
搜尋: m)m文 b)進板 c)未分類 a)作者 /)標題 q)取消?[q]

搜尋 送出(Enter) 取消(Esc)

回覆文章至: f)看板 m)作者信箱 b)兩者皆是 q)取消?[f]
要引用原文嗎? y)引用原文 n)不引用 a)全部回覆 r)複製原文 q)取消?[y]
轉錄本文章於看板: 1)使用連結 2)使用複製 q)取消 ?[1]
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc) 全部(a)

確定要刪除這篇文章?(可按大U救回) 確定(Enter) 取消(Esc)

刪除理由:

確定(Enter) 取消(Esc)
加到這個分類: 確定(Enter) 下一層(→) 回上層(←) 取消(Esc)
你覺得這篇文章: 1)真讚 2)真瞎 q)取消?[1] (再選一次即可收回)
你覺得這篇文章: 1)值得推薦 2)表示反對 3)單純註解 q)取消?[3]
guest
預覽(Enter) 取消(Esc)
上傳圖片
按ctrl+Enter可輸入下一行。
guest
確定要送出? 確定(Enter) 取消(Esc) 繼續(e)
搜尋: 送出(Enter) 取消(Esc)

▏▎▍▌▋▊▉ 請按任意鍵繼續