UIViewに複数のテキストフィールドがあります。
textFieldShouldBeginEditingメソッドの前のtextFieldを辞任します。ここでは、次の一連のイベントが実行されます。
UIKeyboardWillHideNotificationは、前のフィールドのキーボードが非表示になっているフィールドに対応して受信されます。
メソッドtextFieldShouldBeginEditingはYESを返し、その後
UIKeyboardWillShowNotificationは、現在のフィールドのキーボードが表示されている場所で受信されます。
ただし、OS 3.2では、textFieldShouldBeginEditingがYESを返しても、現在のフィールドのUIKeyboardWillShowNotificationは受信されません。
ロジックはOS<3.2で機能します
私が間違っているかもしれないアイデアはありますか?
私のコードの一部の下にリストされています(xibには2つのテキストフィールドしかありません)。
私はkeyboardWillShowとkeyboardWillHideで一連の操作を実行する必要がありますOS3.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");
}