gpt4 book ai didi

ios - 键盘处理就像在 iOS 7 中的消息应用程序中一样

转载 作者:技术小花猫 更新时间:2023-10-29 10:57:22 26 4
gpt4 key购买 nike

我正在实现一个在某种程度上类似于消息应用程序中发生的 View ,因此有一个 UITextView 附加到屏幕底部的 View ,还有一个显示主要内容的 UITableView。当它被点击时,它会随着键盘向上滑动,当键盘被关闭时,它会滑回屏幕底部。

我拥有的那部分工作完美 - 我刚刚订阅了键盘通知 - 将隐藏并显示。

问题是我已经将 UITableView 上的键盘关闭模式设置为交互式,并且在平移时我无法捕获对键盘的更改。

第二个问题是这个带有 uitextview 的栏覆盖了 uitableview 的某些部分。如何解决这个问题?我仍然希望 uitableview 位于此栏的“下方”,就像在消息应用中一样。

我在所有地方都使用 AutoLayout。

任何帮助将不胜感激!

============

编辑1:这是一些代码:

View 层级如下:

查看 - UITableView(这个将包含“消息”) - UIView(这个会滑动)

UITableView 对父 View 的顶部、左侧、右侧和底部有限制,因此它会填满整个屏幕。UIView 对父 View 的左侧、右侧和底部有约束,因此它粘在底部 - 我通过调整约束常量来移动它。

在 ViewWillAppear 方法中:

NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.DidShowNotification, OnKeyboardDidShowNotification);
NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillChangeFrameNotification, OnKeyboardDidShowNotification);
NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillHideNotification, OnKeyboardWillHideNotification);

这里是方法:

void OnKeyboardDidShowNotification (NSNotification notification)
{
AdjustViewToKeyboard (Ui.KeyboardHeightFromNotification (notification), notification);
}

void OnKeyboardWillHideNotification (NSNotification notification)
{
AdjustViewToKeyboard (0.0f, notification);
}

void AdjustViewToKeyboard (float offset, NSNotification notification = null)
{
commentEditViewBottomConstraint.Constant = -offset;

if (notification != null) {
UIView.BeginAnimations (null, IntPtr.Zero);
UIView.SetAnimationDuration (Ui.KeyboardAnimationDurationFromNotification (notification));
UIView.SetAnimationCurve ((UIViewAnimationCurve)Ui.KeyboardAnimationCurveFromNotification (notification));
UIView.SetAnimationBeginsFromCurrentState (true);
}

View.LayoutIfNeeded ();
commentEditView.LayoutIfNeeded ();

var insets = commentsListView.ContentInset;
insets.Bottom = offset;
commentsListView.ContentInset = insets;

if (notification != null) {
UIView.CommitAnimations ();
}
}

最佳答案

我建议您覆盖 View Controller 的 -inputAccessoryView 属性,并将可编辑的 UITextView 作为其 subview 。另外,不要忘记覆盖 -canBecomeFirstResponder 方法以返回 YES。

- (BOOL)canBecomeFirstResponder
{
if (!RUNNING_ON_IOS7 && !RUNNING_ON_IPAD)
{
//Workaround for iOS6-specific bug
return !(self.viewDisappearing) && (!self.viewAppearing);
}

return !(self.viewDisappearing);
}

通过这种方法,系统可以管理一切。

还有一些您必须了解的解决方法:针对 UISplitViewController ( UISplitViewController detail-only inputAccessoryView )、针对释放错误 ( UIViewController with inputAccessoryView is not deallocated ) 等。

关于ios - 键盘处理就像在 iOS 7 中的消息应用程序中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24634795/

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