如何在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
。