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

时间:2016-01-31 22:10:00

标签: swift uidatepicker uianimation

我有一个自定义内联日期选择器,可以像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()

}

1 个答案:

答案 0 :(得分:0)

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

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