ios - 如何快速在 UITableView 中的键盘上方滚动 UITextView

标签 ios swift

我为 objective-c 找到了这个解决方案:Scroll UITextField above Keyboard in a UITableViewCell on a regular UIViewController但我不能 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

关于ios - 如何快速在 UITableView 中的键盘上方滚动 UITextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297048/

相关文章:

iphone - 如何在iOS中在PDF中绘制多种彩色文本?

iphone - 如何使像素适合位图UIImage中的指定颜色?

ios - 动态更新约束不起作用

Swift:柯里函数的好处

iOS:应用程序中的模型架构

ios - 应用程序在 isHidden 属性上崩溃

ios - 如何将 UITabBarItem 添加到 UITabBar

ios - 根据频率对数组元素进行排序

ios - 带有核心文本的自定义 UITableViewCell

ios - 无法在 UITableViewCell 的详细信息文本中显示阿姆哈拉字母