【发布时间】:2010-06-30 13:03:00
【问题描述】:
以下代码在 XCode 3.2.2、iPhone OS 3.1.3 中创建一个 UIActionSheet。嵌入在操作表中的是日期选择器。
但它似乎在 XCode 3.2.3、iOS4 中创建了两张工作表,一张重叠在另一张上。
另外,我在控制台中收到此错误(同样,仅适用于 XCode 3.2.3、iOS4):
wait_fences: failed to receive reply: 10004003
你认为问题是什么?
- (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 而不是早期版本中应该是这种情况。无论如何,我已经更改了代码,所以有一个 BOOL hasDisplayedSheet,最初在 viewDidLoad 中是 NO。然后我用 if 语句将 actionsheet 创建代码(在 textFieldShouldBeginEditing 委托方法中)括起来,例如
if (hasDisplayedSheet == NO) {
// actionsheet code
hasDisplayed = YES
}
并在他们单击工作表按钮时将 hasDiplayedSheet 更改回 NO。
【问题讨论】:
-
只是想排除显而易见的问题 -
textFieldShouldBeginEditing:是否被调用了两次? -
你是对的。它确实调用了 textFieldShouldBeginEditing 两次。我不知道为什么它会在 IOS4 而不是以前的操作系统中这样做。
标签: iphone objective-c ios4 uiactionsheet