在尝试在运行iOS 5.0的iPhone 4S和运行iOS 4.3的iPad上解决相同代码的不同行为时,我遇到了一个令人困惑的问题。
视图控制器代码与带有日期选择器的视图相关联,以输入出生日期。通过Interface Builder,日期选择器与收到的操作“Value Changed”相关联,指向视图控制器方法 - (IBAction)birthDate:(id)sender:
-(IBAction)birthDate: (id)sender {
//Code here executed when date of birth entered. Should not be executed when view loads.
}
在应用程序中,在加载视图时不执行此代码非常重要。我已经通过断点插入演示了这个代码在视图加载iOS 5.0时不执行,但是当视图加载iOS 4.3时执行,导致程序出现真正的问题(默认生日被解释为输入的生日) 。除非用户更改默认出生日期,否则我非常感谢有关如何防止在iOS 4.3中执行IBAction代码的建议。我也非常好奇为什么这种行为差异应该存在。提前谢谢。
答案 0 :(得分:3)
这是对iOS 5.0中UIPickerView行为的记录更改(Release Notes)
在iOS 4.3上解决它的一种方法是在loadView
开头设置一个BOOL,在结束时设置为NO。
您的值更改方法birthDate:
可以在处理更改之前检查此BOOL值是否为NO。
-(void)loadView
{
isViewLoading = YES; // isViewLoading is a BOOL ivar
// load view
}
-(void)viewDidLoad
{
// what ever else
isViewLoading = NO;
}
-(IBAction)birthDate:(id)sender
{
if (isViewLoading) return;
// handle change
}