2015-09-30 69 views
6

我在我的UITableView中有2個部分。
我想讓第一部分允許多個單元格選擇,第二部分只允許單個選擇。
我試了一些代碼,但沒有很好地工作。
如果可能的話,快速代碼。謝謝。UITableView - 多選和單選

enter image description here

+0

你想選擇第二行,當第二部分取消的第一行?另外,發佈現有代碼確實有幫助。 – Caleb

回答

4

也許你可以實現表視圖的委託方法:

tableView(_:shouldHighlightRowAtIndexPath:)

tableView(_:didSelectRowAtIndexPath:)

...並確定(由indexPath.rowindexPath.section),如果相關部分支持s單選/多選(這取決於您的數據模型的自定義邏輯,例如:「部分0支持多選,但部分1不支持」),並且如果它僅支持單選,請檢查是否已選擇一行tableView.indexPathsForSelectedRows)。

如果有選擇的行已經,您可以:

  1. 返回falsetableView(_:shouldHighlightRowAtIndexPath:)
  2. 不要從tableView(_:didSelectRowAtIndexPath:)沒有(只是return)(我不知道,如果這個方法實際上是調用當你從shouldHighlight...返回false時,也許檢查它)。
0

如果您希望第2節中的選定行成爲新選定的行,這可能適用於您。否則,請@ NicolasMiari的答案。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if indexPath.section == 1 { 
     for i in 0..tableView.numberOfRowsInSection(indexPath.section) - 1 { 
      let cell: UITableViewCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: i, inSection: indexPath.section))! 
      if (i == indexPath.row) { 
       cell.accessoryType = .Checkmark 
       cell.selected = false 
      } 
      else { 
       cell.accessoryType = .None 
      } 
     } 
    } 
    else { 
     //Do whatever for the first section 
    } 
} 

不是很優雅,但希望它會給你一個想法。

2

你可以簡單地試試這個。這個解決方案對我來說很完美。試試看,也許對別人的工作......

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if indexPath.section == 0 { 
     if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
      cell.accessoryType = .Checkmark 
     } 
    } 
    else { 
     if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
      cell.accessoryType = .Checkmark 
     } 
    } 
} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    if indexPath.section == 1 { 
     if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
      cell.accessoryType = .None 
     } 
    } 
} 

編輯:對於斯威夫特 - 4

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if indexPath.section == 0 { 
     if let cell = tableView.cellForRow(at: indexPath) { 
      cell.accessoryType = .checkmark 
     } 
    } 
    else { 
     if let cell = tableView.cellForRow(at: indexPath) { 
      cell.accessoryType = .checkmark 
     } 
    } 
} 

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    if indexPath.section == 1 { 
     if let cell = tableView.cellForRow(at: indexPath as IndexPath) { 
      cell.accessoryType = .none 
     } 
    } 
}