Ios 如何在swift中的UITableView中在键盘上方滚动UITextView

Ios 如何在swift中的UITableView中在键盘上方滚动UITextView,ios,swift,Ios,Swift,我为objective-c找到了这个解决方案:但我无法将其应用于swift func textViewShouldBeginEditing(textView: UITextView) -> Bool { var pointInTable:CGPoint? = textView.superview?.convertPoint(textView.frame.origin, toView: tableView) var contentOffset:CGPoint = table

我为objective-c找到了这个解决方案:但我无法将其应用于swift

func textViewShouldBeginEditing(textView: UITextView) -> Bool {
    var pointInTable:CGPoint? =  textView.superview?.convertPoint(textView.frame.origin, toView: tableView)
    var contentOffset:CGPoint = tableView.contentOffset
    contentOffset.y  = pointInTable?.y - textView.inputAccessoryView?.frame.size.height
}
我得到一个错误:

Value of optional type 'CGFloat?' not unwrapped; did you mean to use '!' or '?'?  
当我使用时!或我得到一个错误:
后缀“?”的操作数应具有可选类型;类型为“CGFloat”

这是避免代码中出现错误的一种方法:

func textViewShouldBeginEditing(textView: UITextView) -> Bool {
    var pointInTable:CGPoint = textView.superview!.convertPoint(textView.frame.origin, toView: tableView)
    var contentOffset:CGPoint = tableView.contentOffset
    contentOffset.y  = pointInTable.y
    if let accessoryView = textView.inputAccessoryView {
        contentOffset.y -= accessoryView.frame.size.height
    }
    tableView.contentOffset = contentOffset
    return true
}
首先,我们可以假设
textView
有一个
superview
,所以我们可以用
打开它
因此,
pointInTable
不再是可选的。
如果我们假设
textView
可能没有
inputAccessoryView
,我们可以使用典型的
If let
语法检查
inputAccessoryView
是否存在,如果存在,则从
contentOffset.y
中减去其高度

不要忘记将
contentOffset
分配给
tableView
,并返回
Bool

它移动太多。。我可以让移动的距离变小吗???@SaiPavanParanam绝对可以!请尝试不同的
contentOffset
值,直到找到最适合您的值。@Para太好了answer@Para这段代码将我的文本视图滚动到屏幕的最上方,而不是键盘上方。你能建议如何解决这个问题吗?我知道我可以将静态数字添加到contentOffset中,但我更感兴趣的是找出为什么您的代码没有将其完全放在键盘上方?@saipvanparanam您找到了吗?