我有一个自定义内联日期选择器,可以像Apple Calendar事件日期选择器一样进行扩展和折叠。问题是我需要将日期选择器放在位于UITableView底部的UITableViewCell中,但是当它扩展时,如果不手动滚动视图,则无法看到选择器。对于类似的问题(UITextField在编辑时会在键盘后面消失,如果它低于键盘的高度)我可以在beginEditing和endEditing委托函数中用动画修复它:
let keyboardHeight: CGFloat = 216
UIView.animateWithDuration(0.25, delay: 0.25, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
self.view.frame = CGRectMake(0, (self.view.frame.origin.y - keyboardHeight), self.view.bounds.width, self.view.bounds.height)
}, completion: nil)
有没有人知道类似的动画可能会放在didSelectRowAtIndexPath中,如果它是一个日期选择器,屏幕将通过向下滚动来调整以显示扩展的完整日期选择器,然后当行是没有被选中 - 或者沿着这些方向的东西?
在tableView中选择DatePicker时:
/**
Used to notify the DatePickerCell that it was selected. The DatePickerCell will then run its selection animation and expand or collapse.
*/
public func selectedInTableView() {
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)
}
didSelectRowAtIndexPath函数:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Deselect automatically if the cell is a DatePickerCell.
let cell = self.tableView(tableView, cellForRowAtIndexPath: indexPath)
if (cell.isKindOfClass(DatePickerCell)) {
let datePickerTableViewCell = cell as! DatePickerCell
datePickerTableViewCell.selectedInTableView()
tableView.deselectRowAtIndexPath(indexPath, animated: true)
} else if(cell.isKindOfClass(PickerCell)) {
let pickerTableViewCell = cell as! PickerCell
pickerTableViewCell.selectedInTableView()
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
tableView.beginUpdates()
tableView.endUpdates()
}
答案 0 :(得分:0)
我想我想出了一个似乎可以根据需要运行的解决方案,我在调用didSelectRowAtIndexPath
之后在selectedInTablView()
委托函数中编写了这段代码:
if(datePickerTableViewCell.isExpanded() && datePickerTableViewCell.datePicker == billDatePicker.datePicker) {
tableView.contentOffset = CGPoint(x: 0, y: self.view.frame.height + datePickerTableViewCell.datePickerHeight())
}