Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用类似Slack的UIViewController滑动UIInputView_Ios_First Responder_Inputview_Inputaccessoryview - Fatal编程技术网

Ios 使用类似Slack的UIViewController滑动UIInputView

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那样将输入视图保持在中心视图上 我的输入视图位于底部,占据整个屏幕(

我想使用UIViewController的输入附件视图,如下所示:

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。