gpt4 book ai didi

iphone - textFieldShouldBeginEditing + UIKeyboardWillShowNotification + OS 3.2

转载 作者:行者123 更新时间:2023-12-03 18:30:52 26 4
gpt4 key购买 nike

我在 UIView 上有多个文本字段。

我放弃了 textFieldShouldBeginEditing 方法中的先前文本字段,其中执行了以下事件序列

  • 收到与隐藏前一个字段的键盘的字段相对应的 UIKeyboardWillHideNotification。

  • textFieldShouldBeginEditing 方法返回 YES,然后

  • 在显示当前字段的键盘时收到 UIKeyboardWillShowNotification。

但是,在 OS 3.2 中,即使 textFieldShouldBeginEditing 返回 YES,也不会收到当前字段的 UIKeyboardWillShowNotification。

该逻辑适用于操作系统 < 3.2

有什么我可能做错的地方吗?

下面列出了我的代码的一部分(xib 中只有两个文本字段)。

我需要在keyboardWillShow和keyboardWillHide执行一组操作看看在OS 3.2和OS < 3.2中运行代码的区别

谁能解释一下行为上的差异吗?

.h

@interface ExampleViewController : UIViewController  
{
IBOutlet UITextField *numericTextField;
IBOutlet UITextField *alphaTextField;
UITextField *lastTextField;
int lastCursorPos;
int cursorPosition;
NSMutableArray *textFields;
}

@property (nonatomic, retain) UITextField *lastTextField;
@property (nonatomic, retain) NSMutableArray *textFields;

@end

.m

- (void)viewWillAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:self.view.window];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification object:self.view.window];

self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
self.textFields = [[NSMutableArray alloc] initWithCapacity:2];
[self.textFields insertObject:alphaTextField atIndex:0];
[self.textFields insertObject:numericTextField atIndex:1];
cursorPosition = 1;
[numericTextField becomeFirstResponder];
}

-(void)viewWillDisappear:(BOOL)animated
{
[self setEditing:NO animated:YES];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
int index;
for(UITextField *aField in self.textFields){

if (textField == aField){
index = [self.textFields indexOfObject:aField];
}
}
if(index>=0 ){
lastCursorPos = cursorPosition;
self.lastTextField = [self.textFields objectAtIndex:lastCursorPos-1];
cursorPosition = index +1;

}
[self.lastTextField resignFirstResponder];

return YES;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}

- (void)keyboardWillShow:(NSNotification *)notif {
NSLog(@"Inside keyboardWillShow");
}

- (void)keyboardWillHide:(NSNotification *)notif {
NSLog(@"Inside keyboardWillHide");
}

最佳答案

我相信从 iOS 3.2 开始,在两个文本字段之间切换时不再触发 UIKeyboardWillHideNotification 和 UIKeyboardWillShowNotification。基本上,仅当键盘实际显示或隐藏时才会触发通知,并且由于从一个文本字段切换到另一个文本字段不会隐藏键盘,因此不会触发该事件。

在 iOS 3.2 之前,每当您更改字段时都会触发事件。新方法可以说更正确,但它确实使您尝试做的事情更具挑战性。

您可能最好实现文本字段的委托(delegate),然后您可以检查shouldBeginEditing/didEndEditing事件,或者,您可以子类化UITextField并覆盖becomeFirstResponder/resignFirstResponder方法,以便您可以 Hook 它们并实现当字段接收和失去焦点时的逻辑。

关于iphone - textFieldShouldBeginEditing + UIKeyboardWillShowNotification + OS 3.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2979531/

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