close

關於Table View的Static Cells,

在之前的[iOS][Xcode][Swift]iPhone手機編程--Table View簡單介紹與用法(Static Cells, Auto Layout)一文中,

已有介紹,

今日的主題自然是Dynamic Prototypes,

為免大家來回翻,

某君在這裡簡述一下,

相比起前者的固定Section、固定Row,

後者可以靈活地按照資料顯示。

既然要靈活地用,

至少該知道怎麼呼叫它們吧,

以下圖為例:

一個Cell為一個單位,

下圖共有2個Section、每個有3個Row,

是一個Static Cells來的。

image

而今天的範例:

image

Table View Controller,

是Object的一種,

可按快捷鍵Shitf+Command+L增加,

image

默認就是Dynamic Prototypes,

image

之後就是設計的重點--Cell模板 (dequeueReusableCell) 的設計啦,

既然是動態的,

就是某君給它一個數字,

它就會自動生成十個、百個一樣的Cell,

既然如此,

就要設計一個可重用的Cell讓Swift自己Copy啦,

image

Cell模板 (dequeueReusableCell) 

Cell模板的製作簡單來說需要三步:

第一步:設計

就按照需求設計就可以了,

某君這裡簡單一點,

只有一張圖片、一個Label和一個星星Button,

image

第二步:連結相關的程式碼

其實和一般的Object沒有大的分別,

就是地位高一點,

它有自己特殊的碼,

只需要叫出來就可以用了,

新增File (Command+N)>選擇Cocoa Touch Class

image

選擇需要繼承的父類,

這裡要選的明顯是UITableViewCell,

(有眼尖的已經看到UITableViewController,

對的,這就是待會兒要用到的另一個父類!!)

image

按Next之後就會自動生成下圖左邊的.swift了,

直接點選Cell並繼承,如圖,

image

之後只需要將相應的Object拖曳到Code中就可以了,

其他的Code看似複雜,

其實都是繼承來的財產,

不用經營就可以直接用了。

image

第三步:給模板改個名 (ID) 唄

同樣是點選Cell,並在屬性中修改它的ID。

這樣Cell模板的製作就先告一段落了。

image

TableView設定

這裡其實只需一步!!

第一步:連結相關的程式碼

如同上面Cell模板第二步一樣,生成TableViewController.swift,並繼承,

image

如果暫時拋卻獲取資料 (Data Source) 的部分,

其實按照下圖修改就完成了,

image

效果是醬紫的:

image

(謎之微笑.jpg)

[畫外音:某君,你這是在逗我?]

Data Source源數據 (例子)

講道理,

Data就是每個人都不一樣的嘛,

為了方便大家試驗,

某君簡單貼一貼自己簡單的Data啦:

第一步:創造Data (其實這步死好多腦細胞的說)

新增File (Command+N)>選擇Swift File

第一個 ProductItem.swift (簡單來說就是Data的格式)

img_name:圖片名稱、字串格式

lab_name:Label顯示的文字、字串格式

image

import Foundation

class ProductItem{

    var img_name:String

    var lab_name:String    

    init(img_name param1: String, lab_name param2: String) {

        img_name = param1

        lab_name = param2

    }

}

第二個 ProductDetailInfo.swift (利用上面的格式、輸入具體資料)

image

import Foundation

class ProductDetailInfo {

    var infos=[ProductItem]()          //實現上面的格式類別,並將資料儲存成陣列

    

    init() {

        infos.append(ProductItem(img_name: "table.badge.more", lab_name: "Excel"))

        infos.append(ProductItem(img_name: "uiwindow.split.2x1", lab_name: "Powerpoint"))

        infos.append(ProductItem(img_name: "bold.italic.underline", lab_name: "Typing/ Word"))

        infos.append(ProductItem(img_name: "pencil.tip", lab_name: "Thesis"))

        infos.append(ProductItem(img_name: "tray.full", lab_name: "Filing"))

        infos.append(ProductItem(img_name: "magnifyingglass", lab_name: "Searching"))

        infos.append(ProductItem(img_name: "pencil.and.outline", lab_name: "Drawing"))

        infos.append(ProductItem(img_name: "rectangle.3.offgrid", lab_name: "Poster"))

        infos.append(ProductItem(img_name: "eyedropper", lab_name: "Photoshop"))

        infos.append(ProductItem(img_name: "video", lab_name: "Cutting Video"))

    }

}

資料準備好之後,

就可以回到剛才的地方,

就是這裡:

image

(TableView設定)

勉強再加一步啦~

第二步:連接Data Source

DetailTableViewController.swift

為免大家混亂,

上面已出現的部分,

某君就儘量將其遮去了,

image

let product=ProductDetailInfo()    //在TableView中呼叫詳細資料ProductDetailInfo.swift

let transferInfo=product.infos[indexPath.row]  //根據行數獲取相應的資料

cell.img.image=UIImage(systemName: transferInfo.img_name) 

//Xcode自帶的圖片用systemName 自己放進Assets的圖片直接用Name就可以了

cell.lText.text=transferInfo.lab_name

 

---

2020.10.17

添加收藏? (空心星星變實心星星!) 

上面範例中那右邊的星星是不是有種令人很想按下去的感覺呢?

很多APP都有空心變實心、空心星變實心星的例子,

到底是怎麼變的呢?

在設計時,

已率先加入了有星星圖片的Button:

image

「如果點擊星星,就會變實心。」

很明顯是用if()啦,

那程式該寫在哪呢?

既然Button是在Cell模板中,

那很自然該寫在ReuseTableViewCell.swift

image

相關的知識點其實在上面都提到過,

就不重覆了。

當然啦,

這個收藏只是徒有其表的啦,

沒有任何收藏功能的,

要真的收藏的話背後的功夫可多了。

某君還沒做過,

簡單估計一下,

大概在初始資料中需立Flag,

然後在連接Data Source時再判斷一下就行了(吧~大概~說得真簡單)。

---

Navigation Bar & Tab Bar

順便簡單介紹一下Navigation Bar & Tab Bar吧,

是時候祭出老師的範例了,

實在沒時間再自己設計一個了,

但某君還是很堅持地跟著做了一遍的。

效果是醬紫的:

image

除了一般加Object的方法外,

image

還提供隨時轉換的方法,

更靈活,

image

說到這裡,

可能還是不太清楚Navigation Bar、Tab Bar是什麼東東,

其實就是APP平時上下的那些Bar,

非常常見。

1。Navigation Bar

就是標題欄,

方便用戶返回上一層目錄。

image

2。Tab Bar

就是選項卡,

方便用戶在APP的不同頁面間穿梭。

只需要連結頁面、就會自動出現相應的按鈕:

需要在子頁面中設定標題及圖案,

一經選定,主頁的亦會自動更新。

---

好啦,iOS方面的文章應該暫告一段落啦,

機子真的拖太久還沒還,

某君又會先研究別的,

直到條件允許會再戰iOS的,

只不過到時又應該會改朝換代了吧⋯⋯

 

預告一下:

  1. 之前的Excel好多都還沒完成,例如VBA批量插入圖片的部分;
  2. 而且近期也在努力研究如何將VBA運用在工作當中,已小有心得;
  3. 最近對AutoCAD有點新心得,應該會出;
  4. 之前自學的Python再研究一下應該會出、吧⋯⋯(好多啊。。。)
arrow
arrow

    4ngus 發表在 痞客邦 留言(0) 人氣()