在尝试找出运行 iOS 5.0 的 iPhone 4S 和运行 iOS 4.3 的 iPad 上相同代码的不同行为时,我遇到了一个令人困惑的问题。
View Controller 代码与带有日期选择器的 View 关联,用于输入出生日期。通过 Interface Builder,日期选择器与接收到的指向 View Controller 方法的“值已更改”操作相关联 -(IBAction)birthDate: (id)sender:
-(IBAction)birthDate: (id)sender {
//Code here executed when date of birth entered. Should not be executed when view loads.
}
在应用程序中,加载 View 时不执行此代码非常重要。我已经通过断点插入证明,当 View 加载 iOS 5.0 时,此代码不会执行,但会在 View 加载 iOS 4.3 时执行,从而导致程序出现真正的问题(默认出生日期被解释为输入的出生日期) 。我非常感谢有关如何防止 IBAction 代码在 iOS 4.3 中执行的建议,除非用户更改默认出生日期。我也很好奇为什么会存在这种行为差异。提前致谢。
最佳答案
这是对 iOS 5.0 中 UIPickerView 行为的记录更改 ( Release Notes )
在 iOS 4.3 上解决这个问题的一种方法是在 loadView
的开头将 BOOL 设置为 YES,在结尾设置为 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
}
关于iphone - iOS 4.3 和 5.0 之间 UIDatePicker 代码执行的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884016/