UITextFieldDelegate 协议在 iOS 4.3 和 iOS 5.0 之间的工作方式似乎是未记录的更改,这些更改破坏了我的代码。
简单重现如下:使用 XCode 4.2,创建一个名为 test 的“单一视图应用程序”项目。使用默认选项(即没有 Storyboard,但对 ARC 是)将部署目标设置为 4.3(这样我们就可以在 5.0 和 4.3 中运行应用程序)
将此代码放在 ViewController.h 头文件中:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property(nonatomic,strong) UITextField *textField1;
@property(nonatomic,strong) UITextField *textField2;
@property(nonatomic,strong) UILabel *resultsLabel;
@end
把它放在 ViewController.m 文件中:
#import "ViewController.h"
@implementation ViewController
@synthesize textField1,textField2,resultsLabel;
- (void)viewDidLoad {
textField1=[[UITextField alloc] initWithFrame:CGRectMake(10, 10, 300, 30)];
textField1.tag=1;
textField1.backgroundColor=[UIColor whiteColor];
textField1.delegate=self;
[self.view addSubview:textField1];
textField2=[[UITextField alloc] initWithFrame:CGRectMake(10, 50, 300, 30)];
textField2.tag=2;
textField2.backgroundColor=[UIColor whiteColor];
textField2.delegate=self;
[self.view addSubview:textField2];
resultsLabel=[[UILabel alloc] initWithFrame:CGRectMake(10, 90, 300, 30)];
resultsLabel.backgroundColor=[UIColor clearColor];
[self.view addSubview:resultsLabel];
[super viewDidLoad];
}
-(void)textFieldDidEndEditing:(UITextField *)textField {
switch (textField.tag) {
case 1:
// textField1
[textField2 becomeFirstResponder];
resultsLabel.text=@"Finished editing 1st box";
break;
case 2:
// textField2
resultsLabel.text=@"Finished editing 2nd box";
break;
}
}
@end
在模拟器中运行代码,它会显示两个白色的 UITextField。点击第一个,然后点击第二个。
如果在模拟器上的 iOS 4.3 中运行,UILabel 显示“完成编辑第一个框”如果在模拟器上的 iOS 5.0 中运行,UILabel 显示“完成编辑第二个框”
我正在努力做到这一点,以便当您离开字段 i 时,您会自动转到字段 (i+1)。关于出了什么问题以及如何解决问题的任何建议?我在 Apple 的 iOS 5 发行说明中看不到任何提及。