Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS4创建两个UIActionSheet,3.1.3创建一个?为什么?_Iphone_Objective C_Ios4_Uiactionsheet - Fatal编程技术网

Iphone iOS4创建两个UIActionSheet,3.1.3创建一个?为什么?

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

下面的代码在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 ([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
}