Swift 在每个部分中选择一个单元格
Swift selecting a cell in each section
我在 select 在 swift 中输入多个单元格时遇到一点问题。
我不想让用户 select 任意多的单元格,他只能 select 三个单元格(每个部分一个)。为了更清楚,我会给你一些代码。
我分为三个部分:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCellWithIdentifier("HeaderCell") as! CustomHeaderCell
/* let headerCell = tableView.dequeueReusableCellWithIdentifier("HeaderCell") as CustomHeaderCell */
// headerCell.backgroundColor = UIColor.set(#E6E2E1)
switch (section) {
case 0:
headerCell.headerLabel.text = "Bundesliga";
//return sectionHeaderView
case 1:
headerCell.headerLabel.text = "BBVA";
//return sectionHeaderView
case 2:
headerCell.headerLabel.text = "BPL";
//return sectionHeaderView
default:
headerCell.headerLabel.text = "Other";
}
return headerCell
}
我想在每个 League
中给用户例如 5 Club
到 select。他必须 select 他最喜欢的 Club
每个 League
。我不想做这样的事情:
tableView.allowsMultipleSelection = true
因为我想在每个部分中只允许一个选择。我怎样才能像这样限制用户?
这应该适合你:
override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
let selectedIndexPaths = indexPathsForSelectedRowsInSection(indexPath.section)
if selectedIndexPaths?.count == 1 {
tableView.deselectRowAtIndexPath(selectedIndexPaths!.first!, animated: true)
}
return indexPath
}
func indexPathsForSelectedRowsInSection(section: Int) -> [NSIndexPath]? {
return (tableView.indexPathsForSelectedRows() as? [NSIndexPath])?.filter({ (indexPath) -> Bool in
indexPath.section == section
})
}
Swift 4.1 更新 - 选中单元格
override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
// Find any selected row in this section
if let selectedIndexPath = tableView.indexPathsForSelectedRows?.first(where: {
[=11=].section == indexPath.section
}) {
// Deselect the row
tableView.deselectRow(at: selectedIndexPath, animated: false)
// deselectRow doesn't fire the delegate method so need to
// unset the checkmark here
tableView.cellForRow(at: selectedIndexPath)?.accessoryType = .none
}
return indexPath
}
override func tableView(_ tableView: UITableView, willDeselectRowAt indexPath: IndexPath) -> IndexPath? {
// Prevent deselection of a cell
return nil
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
}
对于 tableView,请确保设置...
allowsMultipleSelection = true
或选择:Interface Builder
中的MutlipleSelection
并为每个单元格设置
selectionStyle = .none
或选择:Interface BuilderNone
我在 select 在 swift 中输入多个单元格时遇到一点问题。
我不想让用户 select 任意多的单元格,他只能 select 三个单元格(每个部分一个)。为了更清楚,我会给你一些代码。
我分为三个部分:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCellWithIdentifier("HeaderCell") as! CustomHeaderCell
/* let headerCell = tableView.dequeueReusableCellWithIdentifier("HeaderCell") as CustomHeaderCell */
// headerCell.backgroundColor = UIColor.set(#E6E2E1)
switch (section) {
case 0:
headerCell.headerLabel.text = "Bundesliga";
//return sectionHeaderView
case 1:
headerCell.headerLabel.text = "BBVA";
//return sectionHeaderView
case 2:
headerCell.headerLabel.text = "BPL";
//return sectionHeaderView
default:
headerCell.headerLabel.text = "Other";
}
return headerCell
}
我想在每个 League
中给用户例如 5 Club
到 select。他必须 select 他最喜欢的 Club
每个 League
。我不想做这样的事情:
tableView.allowsMultipleSelection = true
因为我想在每个部分中只允许一个选择。我怎样才能像这样限制用户?
这应该适合你:
override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
let selectedIndexPaths = indexPathsForSelectedRowsInSection(indexPath.section)
if selectedIndexPaths?.count == 1 {
tableView.deselectRowAtIndexPath(selectedIndexPaths!.first!, animated: true)
}
return indexPath
}
func indexPathsForSelectedRowsInSection(section: Int) -> [NSIndexPath]? {
return (tableView.indexPathsForSelectedRows() as? [NSIndexPath])?.filter({ (indexPath) -> Bool in
indexPath.section == section
})
}
Swift 4.1 更新 - 选中单元格
override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
// Find any selected row in this section
if let selectedIndexPath = tableView.indexPathsForSelectedRows?.first(where: {
[=11=].section == indexPath.section
}) {
// Deselect the row
tableView.deselectRow(at: selectedIndexPath, animated: false)
// deselectRow doesn't fire the delegate method so need to
// unset the checkmark here
tableView.cellForRow(at: selectedIndexPath)?.accessoryType = .none
}
return indexPath
}
override func tableView(_ tableView: UITableView, willDeselectRowAt indexPath: IndexPath) -> IndexPath? {
// Prevent deselection of a cell
return nil
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
}
对于 tableView,请确保设置...
allowsMultipleSelection = true
或选择:Interface Builder
中的MutlipleSelection并为每个单元格设置
selectionStyle = .none
或选择:Interface BuilderNone