Ios 使用类似Slack的UIViewController滑动UIInputView
我想使用UIViewController的输入附件视图,如下所示:Ios 使用类似Slack的UIViewController滑动UIInputView,ios,first-responder,inputview,inputaccessoryview,Ios,First Responder,Inputview,Inputaccessoryview,我想使用UIViewController的输入附件视图,如下所示: override func canBecomeFirstResponder() -> Bool { return true } override var inputAccessoryView: UIView! { return self.bar } 但问题是,我有一个抽屉式的视图,当我打开视图时,输入视图保持在窗口上。如何像Slack那样将输入视图保持在中心视图上 我的输入视图位于底部,占据整个屏幕(
override func canBecomeFirstResponder() -> Bool {
return true
}
override var inputAccessoryView: UIView! {
return self.bar
}
但问题是,我有一个抽屉式的视图,当我打开视图时,输入视图保持在窗口上。如何像Slack那样将输入视图保持在中心视图上
我的输入视图位于底部,占据整个屏幕(下图中红色为输入视图):
有两种方法可以做到这一点,就像Slack那样,这里有一个中间的帖子来展示他是如何做到这一点的,他实际上把一个空的
UIView
作为一个inputAccessoryView
然后在屏幕上跟踪它的坐标,以知道在哪里放置与空视图相关的自定义视图,如果您打算在iPad上支持SplitViewController
,这种方式会很有帮助,但如果您对这种方式不感兴趣,您可以看到我是如何做到这一点的,如下图所示
这里是刷卡前的位置
后面是
实际上,我所做的只是从inputAccessoryView
窗口拍摄快照,并将其放在TableViewController的NavigationController
上
我使用的是from,使用UISideMenuNavigationControllerDelegate
var isInputAccessoryViewEnabled = true {
didSet {
self.inputAccessoryView?.isHidden = !self.isInputAccessoryViewEnabled
if self.isInputAccessoryViewEnabled {self.becomeFirstResponder()}
}
}
func sideMenuWillAppear(menu: UISideMenuNavigationController, animated: Bool) {
let inputWindow = UIApplication.shared.windows.filter({$0.className == "UITextEffectsWindow"}).first
self.inputAccessoryViewSnapShot = inputWindow?.snapshotView(afterScreenUpdates: false)
if let snapShotView = self.inputAccessoryViewSnapShot, let navView = self.navigationController?.view {
navView.addSubview(snapShotView)
}
self.isInputAccessoryViewEnabled = false
}
func sideMenuDidDisappear(menu: UISideMenuNavigationController, animated: Bool) {
self.inputAccessoryViewSnapShot?.removeFromSuperview()
self.isInputAccessoryViewEnabled = true
}
我希望这会有所帮助:)有两种方法可以做到这一点,就像Slack那样,这里有一个中等的帖子来展示他是如何做到这一点的,他实际上把一个空的UIView
作为一个inputAccessoryView
然后在屏幕上跟踪它的坐标,以知道在哪里放置与空视图相关的自定义视图,如果您打算在iPad上支持SplitViewController
,这种方式会很有帮助,但如果您对这种方式不感兴趣,您可以看到我是如何做到这一点的,如下图所示
这里是刷卡前的位置
后面是
实际上,我所做的只是从inputAccessoryView
窗口拍摄快照,并将其放在TableViewController的NavigationController
上
我使用的是from,使用UISideMenuNavigationControllerDelegate
var isInputAccessoryViewEnabled = true {
didSet {
self.inputAccessoryView?.isHidden = !self.isInputAccessoryViewEnabled
if self.isInputAccessoryViewEnabled {self.becomeFirstResponder()}
}
}
func sideMenuWillAppear(menu: UISideMenuNavigationController, animated: Bool) {
let inputWindow = UIApplication.shared.windows.filter({$0.className == "UITextEffectsWindow"}).first
self.inputAccessoryViewSnapShot = inputWindow?.snapshotView(afterScreenUpdates: false)
if let snapShotView = self.inputAccessoryViewSnapShot, let navView = self.navigationController?.view {
navView.addSubview(snapShotView)
}
self.isInputAccessoryViewEnabled = false
}
func sideMenuDidDisappear(menu: UISideMenuNavigationController, animated: Bool) {
self.inputAccessoryViewSnapShot?.removeFromSuperview()
self.isInputAccessoryViewEnabled = true
}
我希望这能有所帮助:)如果slack的视图出现滑动,那么他们可能没有将其设置为inputAccessoryView
。他们可能只是在代码中“手动”管理它的位置。是的,也许。但是如果您使用Slack,将键盘向上移动并在table视图上向下滑动,则一旦碰到input视图的顶部,键盘就会开始向下移动。这让我觉得它是一个输入视图,没有被手动管理。这难道不表明他们设置了tableView.keyboardDismissMode=UIScrollViewKeyboardDismissModeOnDrag
或UIScrollViewKeyboardDismissModeInteractive
?是的,他们也这样做,但因为我正在手动管理我的“inputView”,而且当我到达输入视图的最顶端时,键盘不会向下滑动。当我到达键盘顶部时,它就会向下滑动。Slack的行为就像一个真正的输入视图,因为我一碰到输入视图的顶部,键盘就开始向下滑动。实际上,我认为他们抓住了键盘的框架并进行了更改,而不是使用UIScrollViewKeyboardDismissModeInteractive。如果slack的视图滑过,那么他们可能没有将其设置为inputAccessoryView
。他们可能只是在代码中“手动”管理它的位置。是的,也许。但是如果您使用Slack,将键盘向上移动并在table视图上向下滑动,则一旦碰到input视图的顶部,键盘就会开始向下移动。这让我觉得它是一个输入视图,没有被手动管理。这难道不表明他们设置了tableView.keyboardDismissMode=UIScrollViewKeyboardDismissModeOnDrag
或UIScrollViewKeyboardDismissModeInteractive
?是的,他们也这样做,但因为我正在手动管理我的“inputView”,而且当我到达输入视图的最顶端时,键盘不会向下滑动。当我到达键盘顶部时,它就会向下滑动。Slack的行为就像一个真正的输入视图,因为我一碰到输入视图的顶部,键盘就开始向下滑动。实际上,我认为他们抓住了键盘的框架并进行了更改,而不是使用UIScrollViewKeyboardDismissModeInteractive。