如何在Swift中在UITableView上滚动UITextView

我发现这个解决scheme的Objective-C: 在常规的UIViewController UITableViewCell上滚动键盘上方的UITextField,但我无法适应它的迅速。

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 '?'? 

当我使用! 要么 ? 我得到错误:postfix'?'的操作数 应该有可选的types; types是“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不再是可选的。
如果我们假设inputAccessoryView可能没有inputAccessoryView ,那么我们可以使用典型的if let语法来检查inputAccessoryView存在,如果是,则从contentOffset.y减去它的高度。
不要忘记分配contentOffset到你的tableView并返回一个Bool