Page 184 - 205
That's been one of my mantras - Focus and Simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains. — Steve Jobs
不勾選「Constrain to margins」選項。在這個範例中,間距約束條件是相對於視圖的邊緣,這可以確保表格視圖的所有邊將會延展到整個視圖的邊緣。換句話說,你的表格視圖將會自動調整來延展填滿所有的螢幕尺寸。
若你勾選「Constrain to margins」選項,它會繼續執行,圖8.7顯示了當啟用這項功能時安全區域調整的狀況。
dequeueReusableCell
方法以指定的Cell 識別碼來取得佇列(queue )中可再利用的表格 Cell。而此 datacell 識別碼也就是我們稍早前在介面建構器中所定義的。
你希望你的表格式 App 可在顯示數千筆資料時依然能夠快速回應。當你將每一筆資料列分配一個新 Cell 給它,而不重複使用 Cell 的話,則你的App 將會使用過多的記憶體, 可能會造成使用者滑動表格視圖時效能變慢的情形。請記住每一個 Cell 都關係著性能成本,尤其是這樣的分配會在短時間內發生問題。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
// 回傳區塊中的列數
return restaurantNames.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UIT
ableViewCell {
let cellIdentifier = "datacell"
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
// 設定cell⋯
cell.textLabel?.text = restaurantNames[indexPath.row]
return cell
}
你可能想知道 textLabel 旁的問號(?)是什麼?你還記得我們在第2章所介紹的Optional 嗎?這裡的 textLabel 是一個 Optional。要存取textLabel 的屬性,我們必須先確認 textLabel 是否有一個值。你可以使用if let 來進行確認,另外你也可以在 textLabel 後面加上一個問號(?)。