我想创建附件视图,放置在输入附件视图下方,通过键盘,如Skype App或Viber中:
我已经问过这样的问题here,但建议这个问题的解决方案并不那么优雅,因为当我将滚动视图拖到顶部时,我希望我的附件UIView向下移动键盘(我使用UIScrollViewKeyboardDismissModeInteractive )。
所以我创建了一个函数,找出视图,键盘和我的自定义输入附件视图放在哪里:
func createAttachView() {
attach = MessageChatAttachmentsView(frame: CGRectZero)
let newView = findKeyboardView()
newView!.addSubview(attach!)
newView!.addConstraint(NSLayoutConstraint(item: accessoryView, attribute: .Bottom, relatedBy: .Equal, toItem: attach!, attribute: .Top, multiplier: 1.0, constant: 0.0))
attach!.addConstraint(NSLayoutConstraint(item: attach!, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 260))
attach!.addConstraint(NSLayoutConstraint(item: attach!, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 320))
}
之后我添加了一个自定义UIView并创建了一些约束:
all_ts <- aggts(bts)
allf <- matrix(NA, nrow = 3, ncol = ncol(all_ts))
for(i in 1:ncol(all_ts)){
allf[,i] <- croston(all_ts[,i],h = 3)
}
这会在输入附件视图和键盘上方创建自定义UIView,当我向上滚动时它会移动。但是当我想按下按钮时,我按下键盘上的一个键。
那么如何将此视图移动到UIInputSetHostView中的视图层次结构顶部?
答案 0 :(得分:3)
class MessageChatInputAccessoryView : UIToolbar {
var textView:UITextView! //textView for entering text
var sendButton: UIButton! //send message
var attachButton: UIButton! // attach button "+"
var attachTextView:UITextView! --> this one
override init(frame: CGRect) {
super.init(frame: frame)
.....
.....
attachTextView = UITextView(frame: CGRectZero)
attachTextView.alpha = 0.0
self.addSubview(attachTextView)
....
}
所以在我的主视图控制器中,我创建了函数,为这个新创建的attachTextView重新初始化inputView,如下所示:
func attach(sender: UIButton) {
if attachMenuIsShown {
accessoryView.attachTextView.inputView = accessoryView.textView.inputView
accessoryView.attachTextView.reloadInputViews()
attachMenuIsShown = false
} else {
accessoryView.attachTextView.becomeFirstResponder()
accessoryView.attachTextView.inputView = MessageChatAttachmentsView(frame: CGRectZero)
accessoryView.attachTextView.reloadInputViews()
attachMenuIsShown = true
}
}
因此,当我按下附加按钮时,我的attachTextView成为第一响应者,而不是重新初始化此textView的输入视图。我在输入附件视图下方获得了附件视图。当我再次按下附加按钮时,我使用默认的inputView为我的主textView重新初始化inputView,这是键盘视图。