【发布时间】:2021-01-16 04:29:01
【问题描述】:
我的应用中有一个评论部分,用户可以在其中 1) 查看所有已发布的 cmets,以及 2) 在同一个视图控制器中发表自己的评论。当用户到达视图控制器时,视图仍保留在 CollectionView 的顶部,其中显示了最早的 cmets。但是,当用户点击底部的自定义 InputAccessoryView 时,我希望视图控制器滚动到最新 cmets 所在的 CollectionView 底部。这就是我苦苦挣扎的地方。
我的 CommentVC 如下所示:
lazy var containerView: CommentInputAccessoryView = {
let frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 60)
let containerView = CommentInputAccessoryView(frame: frame)
containerView.backgroundColor = .white
containerView.delegate = self
return containerView
}()
override var inputAccessoryView: UIView? {
get {
return containerView
}
}
override var canBecomeFirstResponder: Bool {
return true
}
func scrollToBottom() {
if comments.count > 0 {
let indexPath = IndexPath(item: comments.count - 1, section: 0)
collectionView?.scrollToItem(at: indexPath, at: .bottom, animated: true)
}
}
如您所见,我创建了函数 scrollToBottom,但即使我使用 UITextFieldDelegate 子类化 CommentVC,在 textFieldDidBeginEditing 函数中调用此函数也不起作用。这在 CommentInputAccessoryView 文件中也不起作用,因为 scrollToBottom 应该需要在 CommentVC 中调用。更复杂的是,实际的 UITextView 有自己的名为 CommentInputTextView 的文件,该文件在 CommentInputAccessoryView 文件中使用。
我不确定这个问题的正确解决方案是什么,但如果有人能提出建议,我将不胜感激。
【问题讨论】:
标签: ios swift uitextfield uitextfielddelegate inputaccessoryview