Iphone iOS4创建两个UIActionSheet,3.1.3创建一个?为什么?
下面的代码在XCode 3.2.2、iPhone OS 3.1.3中创建了一个UIActionSheet。动作表中嵌入了一个日期选择器 但它似乎在XCode 3.2.3 iOS4中创建了两个工作表,一个工作表覆盖在另一个工作表上 此外,我在控制台中也遇到了这个错误(同样,仅在使用XCode 3.2.3、iOS4时): 你认为问题是什么Iphone iOS4创建两个UIActionSheet,3.1.3创建一个?为什么?,iphone,objective-c,ios4,uiactionsheet,Iphone,Objective C,Ios4,Uiactionsheet,下面的代码在XCode 3.2.2、iPhone OS 3.1.3中创建了一个UIActionSheet。动作表中嵌入了一个日期选择器 但它似乎在XCode 3.2.3 iOS4中创建了两个工作表,一个工作表覆盖在另一个工作表上 此外,我在控制台中也遇到了这个错误(同样,仅在使用XCode 3.2.3、iOS4时): 你认为问题是什么 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { if ([textFie
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if ([textField tag] >0 )
{
[self dismissKeyboard];
NSString *dateTitle;
dateFieldNumber = [textField tag];
dateTitle = @"Enter your Birth Date";
NSString *title = @"\n\n\n\n\n\n\n\n\n\n\n\n" ;
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:[NSString stringWithFormat:@"%@%@", title, NSLocalizedString(dateTitle, @"")]
delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Ok", nil];
[actionSheet showInView:[UIApplication sharedApplication].keyWindow];
UIDatePicker *datePicker2 = [[UIDatePicker alloc] init];
self.datePicker = datePicker2;
[datePicker2 release];
self.datePicker.date = [NSDate date];
[self.datePicker addTarget:self
action:@selector(changeDateInLabel:)
forControlEvents:UIControlEventValueChanged];
self.datePicker.datePickerMode = UIDatePickerModeDate;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:60];
NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps setYear:-60];
NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];
[calendar release];
[self.datePicker setMaximumDate:maxDate];
[self.datePicker setMinimumDate:minDate];
[actionSheet addSubview:self.datePicker];
return NO;
} else {
return YES;
}
}
编辑 正如Brian在下面指出的,textFieldShouldBeginEditing委托方法被调用了两次。我看不出为什么IOS4中会出现这种情况,而不是更早的版本。无论如何,我已经更改了代码,所以有一个boolhasdisplayedsheet,它最初在viewDidLoad中是不存在的。然后,我用if语句将操作表创建代码(在textFieldShouldBeginEditing委托方法中)括起来,如
if (hasDisplayedSheet == NO) {
// actionsheet code
hasDisplayed = YES
}
单击“工作表”按钮时,将hasDiplayedSheet
更改回“否”。这样就有了一个解决方案,可以将UIDatePicker
添加到UIActionSheet
,这可能会直接帮助您。
或者这个,看起来更好
就我个人而言,我永远无法让这些解决方案中的任何一个很好地工作,我也不确定这是否是苹果建议的方法?通过将UIPickerView
作为子视图,你自己制作了一个UIPickerView
,我完全成功地了解了这些UIPickerView
视图在苹果应用程序中的外观和行为——这篇文章帮助我开始了。当我的行为正常时,我添加了一个OverlyViewController助手类,使我的(模态)视图背景半透明;看
请参阅关于等待的问题。只是试图排除明显的-是
textfield应该开始编辑:
被调用两次?你是对的。它确实调用textFieldShouldBeginEditing两次。我不知道为什么它会在IOS4中这样做,而不是在以前的OSs中。
if (hasDisplayedSheet == NO) {
// actionsheet code
hasDisplayed = YES
}