gpt4 book ai didi

ios - 屏幕旋转时的多个 NSNotifications

转载 作者:行者123 更新时间:2023-11-29 13:01:54 29 4
gpt4 key购买 nike

我在旋转设备时收到多个 UIKeyboardDidShowNotification 和 UIKeyboardDidHideNotification 通知,我不明白为什么。

我有一个应用程序,可以让您为每张图片编辑文本。 (它在 UITextView 中。)大多数时候我需要向上滑动文本以便您可以在键盘上方看到它,然后在您完成编辑后将其向下滑动。然后我更新数据库以保存新文本。我使用通知来告诉我键盘何时显示以及何时消失。当用户点击键盘上的键盘关闭图标时,它在 iPad 上工作正常。如果用户滑动到下一页并且 iOS 关闭键盘,它也能正常工作。由于iPhone和iPod没有键盘关闭键,我写了一个点击图片或背景时关闭键盘的方法。它在那里也工作得很好。但是,当我旋转设备时,会收到多个隐藏和显示通知。我不知道为什么。

我得到的不是一个 UIKeyboardDidHideNotification 通知,而是一个隐藏、一个显示、一个隐藏,然后是一个显示。

2:39:44.200 Picts for SLPs[16533:907] keyboardDidHide called. Keyboard showing flag is YES.
2:39:51.751 Picts for SLPs[16533:907] keyboardDidShow called. Keyboard showing flag is NO.
2:39:55.224 Picts for SLPs[16533:907] keyboardDidHide called. Keyboard showing flag is YES.
2:39:56.124 Picts for SLPs[16533:907] keyboardDidShow called. Keyboard showing flag is NO.

我在下面发布了相关代码。它主要来自 StackOverflow 帖子(谢谢大家)。

在我显示图片的类中,我在初始化时开始通知。

- (id)initWithParentView:(UIView *)parentview  {

self = [super init];
if (self) {
_parentView = parentview;
if (ALLOW_DATABASE_EDITING) [self startNotifications];
}

return self;
}

- (void)startNotifications {

// Listen for keyboard appearances and disappearances
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardDidShowNotification
object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidHide:)
name:UIKeyboardDidHideNotification
object:nil];
}

当用户点击图片时,View Controller 调用 View 中的 hideKeyboard 方法。

- (void)dismissKeyboard {

if (self.showArtic.keyBoardIsShowing) {
[self.showArtic hideTheKeyboard];
}
}

resignFirstResponder 发送关闭键盘的通知

- (void)hideTheKeyboard {

id <ShowArticDelegate> SA_delegate = _delegate;
// Don't update the database when there is no text.
if ( ![self.editableTextView.text isEqualToString:@""] ) {
[SA_delegate updateTextInDatabase:self.editableTextView.text];
}
[self.editableTextView resignFirstResponder];
}

这些方法响应通知。

- (void)keyboardDidHide:(NSNotification *)notification {
NSLog(@"keyboardDidHide called. Keyboard showing flag is %@.", self.keyBoardIsShowing ? @"YES" : @"NO");
self.keyBoardIsShowing = NO;
// Move the text, update the database
}

- (void)keyboardDidShow:(NSNotification *)notification {
NSLog(@"keyboardDidShow called. Keyboard showing flag is %@.", self.keyBoardIsShowing ? @"YES" : @"NO");
self.keyBoardIsShowing = YES;
// Move the text
}

最佳答案

您可以在此方法中手动关闭键盘并清理您的数据库:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

然后,如果您希望在旋转完成后恢复键盘,请手动调用您的方法以从内部显示它:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {

这可能符合您的需求,也可能不符合您的需求,但这是一种非常常见且简洁的技术,可以在 Apple 处理轮换时“让开”,然后在一切恢复正常后恢复正常工作。

关于ios - 屏幕旋转时的多个 NSNotifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576086/

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