gpt4 book ai didi

ios - 随键盘移动的 View

转载 作者:可可西里 更新时间:2023-11-01 04:52:31 25 4
gpt4 key购买 nike

我有一个带有 UIScrollView 的 iOS 应用程序,它基本上看起来像 Messages.app:屏幕上的内容和底部的 TextView 和一个用于添加更多内容的按钮。当键盘出现时, TextView 和按钮正确向上移动。

我设置了 keyboardDismissMode 以便向下拖动键盘使其消失但是在拖动过程中,随着键盘向下移动,我如何更新我的 View 在屏幕上的位置以执着于它?似乎在此过程中未触发键盘将更改框架通知。

这样做的“正确”方法是什么?

编辑:我有预感使用输入 View /附件 View 可能可行,但不确定这是正确的方向。

最佳答案

很确定此行为需要 SPI。但是:您可以遍历 View /窗口层次结构,找到键盘窗口,并对其应用转换以在交互过程中移动它。 (window.transform=)

不确定当您的交互结束时该怎么做——也许手动将键盘动画化(使用上述技术)以完成键盘隐藏,然后当它被隐藏时,退出第一响应者而不进行动画处理。

编辑:

抱歉,我以为你想移动键盘,但如果你想观察键盘位置,你可以使用 KVO(正如@KudoCC 建议的那样)

static void * __keyboardCenterKVOContext = & __keyboardCenterKVOContext ;

-(void)setUpKeyboardObserver
{
UIView * keyboardView = ...?
[ keyboardView addObserver:self forKeyPath:@"center" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial context:__keyboardCenterKVOContext ] ;
}

然后实现KVO观察器:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ( context == __keyboardCenterKVOContext )
{
CGPoint newKeyboardCenter = [ [ change valueForKey:NSKeyValueChangeNewKey ] pointValue ] ;
// .. handle new keyboard position here ...
}
else
{
[ super observeValueForKeyPath:keyPath ofObject:object change:change context:context ] ;
}
}

每次键盘 View 更改其中心属性时,您的 KVO 观察器都会运行。您也可以尝试观察键盘窗口的 frame 和/或 transform 属性。

我这里有一些代码可以帮助 KVO 观察,这可能对你有帮助:https://gist.github.com/nielsbot/6873377

(您可能想要使用我的帮助程序代码的原因是因为它会自动从正在释放的对象中删除 KVO 观察。这需要一些运行时摆弄,但在您的情况下您真的不知道键盘窗口何时会被释放。虽然也许你可以在你的 keyboardWillHide 处理程序中拆除 KVO)

关于ios - 随键盘移动的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19652169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com