關於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來的。
而今天的範例:
Table View Controller,
是Object的一種,
可按快捷鍵Shitf+Command+L增加,
默認就是Dynamic Prototypes,
之後就是設計的重點--Cell模板 (dequeueReusableCell) 的設計啦,
既然是動態的,
就是某君給它一個數字,
它就會自動生成十個、百個一樣的Cell,
既然如此,
就要設計一個可重用的Cell讓Swift自己Copy啦,
Cell模板 (dequeueReusableCell)
Cell模板的製作簡單來說需要三步:
第一步:設計
就按照需求設計就可以了,
某君這裡簡單一點,
只有一張圖片、一個Label和一個星星Button,
第二步:連結相關的程式碼
其實和一般的Object沒有大的分別,
就是地位高一點,
它有自己特殊的碼,
只需要叫出來就可以用了,
新增File (Command+N)>選擇Cocoa Touch Class
選擇需要繼承的父類,
這裡要選的明顯是UITableViewCell,
(有眼尖的已經看到UITableViewController,
對的,這就是待會兒要用到的另一個父類!!)
按Next之後就會自動生成下圖左邊的.swift了,
直接點選Cell並繼承,如圖,
之後只需要將相應的Object拖曳到Code中就可以了,
其他的Code看似複雜,
其實都是繼承來的財產,
不用經營就可以直接用了。
第三步:給模板改個名 (ID) 唄
同樣是點選Cell,並在屬性中修改它的ID。
這樣Cell模板的製作就先告一段落了。
TableView設定
這裡其實只需一步!!
第一步:連結相關的程式碼
如同上面Cell模板第二步一樣,生成TableViewController.swift,並繼承,
如果暫時拋卻獲取資料 (Data Source) 的部分,
其實按照下圖修改就完成了,
效果是醬紫的:
(謎之微笑.jpg)
[畫外音:某君,你這是在逗我?]
Data Source源數據 (例子)
講道理,
Data就是每個人都不一樣的嘛,
為了方便大家試驗,
某君簡單貼一貼自己簡單的Data啦:
第一步:創造Data (其實這步死好多腦細胞的說)
新增File (Command+N)>選擇Swift File
第一個 ProductItem.swift (簡單來說就是Data的格式)
img_name:圖片名稱、字串格式
lab_name:Label顯示的文字、字串格式
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 (利用上面的格式、輸入具體資料)
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"))
}
}
資料準備好之後,
就可以回到剛才的地方,
就是這裡:
(TableView設定)
勉強再加一步啦~
第二步:連接Data Source
DetailTableViewController.swift
為免大家混亂,
上面已出現的部分,
某君就儘量將其遮去了,
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:
「如果點擊星星,就會變實心。」
很明顯是用if()啦,
那程式該寫在哪呢?
既然Button是在Cell模板中,
那很自然該寫在ReuseTableViewCell.swift:
相關的知識點其實在上面都提到過,
就不重覆了。
當然啦,
這個收藏只是徒有其表的啦,
沒有任何收藏功能的,
要真的收藏的話背後的功夫可多了。
某君還沒做過,
簡單估計一下,
大概在初始資料中需立Flag,
然後在連接Data Source時再判斷一下就行了(吧~大概~說得真簡單)。
---
Navigation Bar & Tab Bar
順便簡單介紹一下Navigation Bar & Tab Bar吧,
是時候祭出老師的範例了,
實在沒時間再自己設計一個了,
但某君還是很堅持地跟著做了一遍的。
效果是醬紫的:
除了一般加Object的方法外,
還提供隨時轉換的方法,
更靈活,
說到這裡,
可能還是不太清楚Navigation Bar、Tab Bar是什麼東東,
其實就是APP平時上下的那些Bar,
非常常見。
1。Navigation Bar
就是標題欄,
方便用戶返回上一層目錄。
2。Tab Bar
就是選項卡,
方便用戶在APP的不同頁面間穿梭。
只需要連結頁面、就會自動出現相應的按鈕:
需要在子頁面中設定標題及圖案,
一經選定,主頁的亦會自動更新。
---
好啦,iOS方面的文章應該暫告一段落啦,
機子真的拖太久還沒還,
某君又會先研究別的,
直到條件允許會再戰iOS的,
只不過到時又應該會改朝換代了吧⋯⋯
預告一下:
- 之前的Excel好多都還沒完成,例如VBA批量插入圖片的部分;
- 而且近期也在努力研究如何將VBA運用在工作當中,已小有心得;
- 最近對AutoCAD有點新心得,應該會出;
- 之前自學的Python再研究一下應該會出、吧⋯⋯(好多啊。。。)
留言列表