自定义展开/折叠日期选择器在';表视图底部单元格中的s-Swift

自定义展开/折叠日期选择器在';表视图底部单元格中的s-Swift,swift,uidatepicker,uianimation,Swift,Uidatepicker,Uianimation,我有一个自定义的内联日期选择器,它可以像Apple日历事件日期选择器一样展开和折叠。问题是,我需要将日期选择器放置在UITableView底部的UITableViewCell中,但当它展开时,如果不手动向下滚动视图,则无法看到选择器。对于类似的问题(如果UITextField低于键盘高度,则在编辑时会消失在键盘后面),我可以通过BeginEdit和EndEdit代理函数中的动画来修复它: let keyboardHeight: CGFloat = 216 UIView.animateWithD

我有一个自定义的内联日期选择器,它可以像Apple日历事件日期选择器一样展开和折叠。问题是,我需要将日期选择器放置在UITableView底部的UITableViewCell中,但当它展开时,如果不手动向下滚动视图,则无法看到选择器。对于类似的问题(如果UITextField低于键盘高度,则在编辑时会消失在键盘后面),我可以通过BeginEdit和EndEdit代理函数中的动画来修复它:

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中选择日期选择器时:

/**
  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()

}

我想我找到了一个似乎可以根据需要工作的解决方案,在调用
selectedTableView()
之后,我在
didSelectRowAtIndexPath
委托函数中编写了这段代码:

if(datePickerTableViewCell.isExpanded() && datePickerTableViewCell.datePicker == billDatePicker.datePicker) {
            tableView.contentOffset = CGPoint(x: 0, y: self.view.frame.height + datePickerTableViewCell.datePickerHeight())
}