2017-07-28 69 views
2

背景爲什麼它需要的tableView(_:indentationLevelForRowAt :)插入細胞與細胞的靜態表視圖

的故事來自於書IOS學徒(埃德的第二個例子,當6 2016 )

創建了一個帶有兩節的UItableView。在故事板中設計了以下內容:第0節有一行滿足一個靜態單元格,第1節有兩行滿滿兩個靜態單元格。

怎麼實現

當接頭區段1的最後一行(即,在畫面A的的dueDate列)用的UIDatePicker一個新的細胞會被插入的tableView(請參閱畫面B )

如何筆者解決充滿的UIDatePicker問題

一個UITableViewCell中加入現場對接在storyBoard中(請參閱圖C),當dueDate行被挖掘時,新的tableCell將被添加到表中

靜態單元格的表視圖沒有數據源,因此不使用像「cellForRowAt」 。爲了這個單元格中插入到表中的以下數據源的功能已經覆蓋

tableView(_:numberOfRowsInSection:) 
tableView(_:cellForRowAt:) 
tableView(_:heightForRowAt:) 
tableView(_:indentationLevelForRowAt:) 

問題

功能tableView(_:indentationLevelForRowAt:)真正混淆了我很多!這裏是完整的代碼

override func tableView(_ tableView: UITableView, indentationLevelForRowAt indexPath: IndexPath) -> Int { 
    var newIndexPath = indexPath 
    if indexPath.section == 1 && indexPath.row == 2 { 
     newIndexPath = IndexPath(row: 0, section: indexPath.section) 
    } 
    return super.tableView(tableView, indentationLevelForRowAt: newIndexPath) 
    } 

問題

這是什麼功能的含義是什麼?它的目的是什麼?我已閱讀document,但我沒有得到太多的信息。

當插入第三行/ datePicker單元(indexPath.section == 1 && indexPath.row == 2)爲什麼函數會縮進第一行newIndexPath = IndexPath(row: 0, section: indexPath.section)

enter image description here

回答

1

實施tableView(_:indentationLevelForRowAt:)允許在一個分層/樹視圖類型的格式顯示該表中的行。如:

Level 1 
    Sub-Level 1a 
    Sub-Level 1b 
Level 2 
    Sub-Level 2a 
    Sub-sub-level 2aa 
    Sub-sub-level 2ab 
etc... 

通常情況下,一個可以使用:

override func tableView(_ tableView: UITableView, indentationLevelForRowAt indexPath: IndexPath) -> Int { 
    if let myObj = myData[indexPath.row] as? MyObject { 
     return myObj.myIndentLevel 
    } 
    return 0 
} 

對於你給出的例子,沒有讀的書...

這樣看來,筆者決定包含UIDatePicker新行(2)應具有相同的縮進級別節中的第一行(0)。如果它是而不是2,則返回默認/當前縮進級別。

雖然的

var newIndexPath = indexPath 
if indexPath.section == 1 && indexPath.row == 2 { 
    newIndexPath = IndexPath(row: 0, section: indexPath.section) 
} 
return super.tableView(tableView, indentationLevelForRowAt: newIndexPath) 

意圖似乎有點更加明顯/清除與

newIndexPath = IndexPath(row: 0, section: 1) 

,因爲它已經將此限制爲section == 1

+0

很好的答案!非常感謝。 – SLN