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

时间:2010-06-30 13:03:00

标签: 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):

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语句附上了动作表创建代码(在textFieldShouldBeginEditing委托方法中),比如

if (hasDisplayedSheet == NO) {   

// actionsheet code

hasDisplayed = YES
}

并在点击工作表按钮时将hasDiplayedSheet更改回NO。

1 个答案:

答案 0 :(得分:3)

此SO post有一个解决方案,可以UIDatePicker添加UIActionSheet,可以直接帮助您。 或者这个post看起来更好。

就个人而言,我永远无法让这些解决方案中的任何一个能够很好地运作,而且我不确定这会是Apple建议的方法吗?通过动画UIPickerView,以UIView作为子视图,我自己 - blog帖子,我在Apple应用中看到这些UIPickerView视图的外观和行为方式取得了圆满成功帮助我开始了。当我得到这种行为时,我添加了一个OverlayViewController助手类,使我的(模态)视图背景半透明;见post

有关wait_fences问题,请参阅post