У меня есть UITableView, в котором для некоторых ячеек я программно добавляю UISwitch в качестве вспомогательного элемента. Для метода делегата didSelectRowAtIndexPath
Я использую следующее: tableView.deselectRowAtIndexPath(indexPath, animated: true)
немедленно, если ячейка имеет собственный класс. Я выполняю некоторые дополнительные действия (разворачивание/сведение). UISwitch не имеет пользовательского класса, это вспомогательное окно обычной ячейки, поэтому tableView.deselectRowAtIndexPath(indexPath, animated: true)
выполняется при нажатии на ячейку, и это все. Проблема в том, что с ячейками, которые имеют UISwitch в качестве accessView, если вы переключаете переключатель вкл/выкл, он работает нормально - но второй вы нажимаете в другом месте в одной ячейке, он остается выделенным, и приложение зависает. Почему это происходит и как я могу это предотвратить?UISwitch в UITableViewCell замерзает приложение, когда ячейка выбрана, не замерзает при переключении UISwitch
didSelectRowAtIndexPath Функция:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
// Deselect automatically if the cell is a DatePickerCell/PickerCell.
let cell = self.tableView(tableView, cellForRowAtIndexPath: indexPath)
if (cell.isKindOfClass(DatePickerCell)) {
let datePickerTableViewCell = cell as! DatePickerCell
datePickerTableViewCell.selectedInTableView(tableView)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
} else if(cell.isKindOfClass(PickerCell)) {
let pickerTableViewCell = cell as! PickerCell
pickerTableViewCell.selectedInTableView(tableView)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
}
И я установить переключатели следующим образом: функция
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell
let row = indexPath.row
allDaySwitch.on = false
gstSwitch.on = false
//Assigns UISwitch cells and UITextField cells
if(indexPath.section == 0) {
let rowTitle = mainOptions[row]
cell.textLabel?.text = rowTitle
cell.accessoryView = nil
} else if(indexPath.section == 1) {
let rowTitle = dateOptions[row]
if(rowTitle == "All Day") {
cell.accessoryView = allDaySwitch
} else {
cell.accessoryView = nil
}
cell.textLabel?.text = rowTitle
} else if(indexPath.section == 2) {
let rowTitle = alertOptions[row]
cell.accessoryView = nil
cell.textLabel?.text = rowTitle
} else {
let rowTitle = billingOptions[row]
if(rowTitle == "Tax Included") {
cell.accessoryView = gstSwitch
} else {
cell.accessoryView = nil
}
cell.textLabel?.text = rowTitle
}
return cell
}
selectedInTableView:
public func selectedInTableView(tableView: UITableView) {
expanded = !expanded
UIView.transitionWithView(rightLabel, duration: 0.25, options:UIViewAnimationOptions.TransitionCrossDissolve, animations: {() -> Void in
self.rightLabel.textColor = self.expanded ? self.tintColor : self.rightLabelTextColor
}, completion: nil)
tableView.beginUpdates()
tableView.endUpdates()
}
Но мне нужно, чтобы оно выполняло определенные действия в зависимости от типа ячейки, поскольку у меня есть классы клиентов для определенных ячеек. Так вот как я могу сравнить @jasonnoahchoi – coopwatts
, как выглядит ваш 'selectedInTableView' в datePickerCell? – jasonnoahchoi
Я обновил проводку, чтобы включить эту функцию. – coopwatts