iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
1

終於要爬出深淵啦~~今天是值得慶祝的UITableView的完結篇

Scrolling

scrollToRow(at:at:animated:)可以讓指定indexPath的row移動到表格上指定的position,UITableView.ScrollPosition是個enum,有上中下等位置。
例如我對scrollButton加入以下action,設定indexPath及捲動的最終位置:

@objc func scrollAction(_ sender: UIButton) {
    newTableView.scrollToRow(at: IndexPath(row: 7, section: 1), at: UITableView.ScrollPosition.middle, animated: true)
}


則當我按下button時,section 1的row 7就跑到表格的最中間了。
呼叫此方法不同於使用者捲動畫面,並不會傳送訊息給UIScrollViewDelegate跟呼叫scrollViewDidScroll(_:)。

而scrollToNearestSelectedRow(at:animated:)顧名思義,就是把被選取的row捲到指定的table view位置:

@objc func scrollAction(_ sender: UIButton) {
    newTableView.scrollToNearestSelectedRow(at: UITableView.ScrollPosition.middle, animated: true)
}

Edit Mode

其實之前為了講move跟allowSelection時就有提到過edit mode,使用setEditing(_:animated:)或isEditing指定一個布林值來切換表格進入(true)/退出(false)編輯模式。
一般狀況下,進入編輯模式會於表格列的左側出現插入/刪除符號,而右側出現重新安排表格列(例如移動)的符號(下圖左)。而如果表格允許多重選取(allowsMultipleSelectionDuringEditing的值為true),則進入編輯模式後表格列左側會出現多重選取的checkmark(下圖右)。

Getting the Drawing Areas

這是一串取得所指定section/row/header/footer在table view的位置及大小(CGRect)的function。

取得section,若tableView.style為plain,則section = 0。

newTableView.rect(forSection: 1)

取得row,若indexPath無效,則返回CGRectZero。

newTableView.rectForRow(at: IndexPath(row: 7, section: 1))

取得header/footer。

newTableView.rectForHeader(inSection: 2)
newTableView.rectForFooter(inSection: 3)

Remembering the Last Focused Cell

remembersLastFocusedIndexPath是個布林值,當值為true的時候,會在視圖控制器轉換時記憶在table離開focus前最後被focus的cell的indexPath,並且在table重新被focus時自動重新導向到記憶的indexPath。預設值為false。

在view controller轉換的期間或當下,這個屬性的影響可能被忽略。在這種情況下,view controller會在此屬性影響前試圖讀取在轉換前被focus的對象。

Saving and Restoring

有沒有印象,有時facebook或其他應用程式使用到一半移到背景程式或休眠(非關閉),但過不久再打開程式就重啟了。
這是因為app沒有設定狀態存取。tableView支援app內部對狀態進行存取,要使用這個功能,你需要為restorationIdentifier設置一個非空字串。當tableView的父視圖被儲存後,tableView裡的內容也會自動被儲存。
如果tableView dataSource採用UIDataSourceModelAssociation這個協定,table將藉由一個你自定義的ID來存取資料而非indexPath。

而你重新focus該應用程式時,app就會依據設定的restorationIdentifier,從休眠前的最終狀態開始讀取而不會重新讀取整個程式。

那下一回即將進入UITextView。


上一篇
Day 23: 來自深淵-UITableView(VIII)
下一篇
Day 25: 你怎麼好像有點眼熟啊UITextView?
系列文
Hey! UIKit, 做個朋友吧~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Shiva虛碼
iT邦新手 3 級 ‧ 2019-10-09 17:04:58

乾杯吧!!!
https://ithelp.ithome.com.tw/upload/images/20191009/20118976op7qkQbuwD.png

我要留言

立即登入留言