iOS 4.3和5.0之间的不同行为与UIDatePicker代码执行

时间:2011-10-25 02:22:22

标签: iphone ios4 datepicker ios5 uidatepicker

在尝试在运行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代码的建议。我也非常好奇为什么这种行为差异应该存在。提前谢谢。

1 个答案:

答案 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
}