1

以下のコードは、XCode 3.2.2、iPhone OS 3.1.3 で 1 つの UIActionSheet を作成します。アクション シートには日付ピッカーが埋め込まれています。

しかし、XCode 3.2.3、iOS4 で 2 つのシートを作成し、一方を他方の上に重ねるようです。

また、コンソールに次のエラーが表示されます (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 デリゲート メソッドが 2 回呼び出されていました。以前のバージョンではなく、IOS4 でこれが当てはまる理由がわかりません。とにかく、BOOL hasDisplayedSheet があるようにコードを変更しました。これは、最初は viewDidLoad で NO です。次に、アクションシート作成コード (textFieldShouldBeginEditing デリゲート メソッド内) を if ステートメントで囲みました。

if (hasDisplayedSheet == NO) {   

// actionsheet code

hasDisplayed = YES
}

シート ボタンをクリックするとhasDiplayedSheetNO に戻ります。

4

1 に答える 1

3

この SO投稿には、直接役立つ可能性のある aUIDatePickerに aを追加するための解決策があります。UIActionSheetまたは、この投稿、より良く見えます。

個人的には、これらのソリューションをうまく機能させることはできませんでした。Apple が提案するアプローチになるかどうかはわかりません。私は完全に成功し、これらのUIPickerViewビューが Apple アプリでどのように表示され、どのように動作するかについて、あなた自身をサブビューとしてアニメーション化することでUIView統一UIPickerViewしました - このブログ投稿は私が始めるのに役立ちました. この動作が機能するようになったら、OverlayViewController ヘルパー クラスを追加して、(モーダル) ビューの背景を半透明にしました。投稿を参照してください。

wait_fences の質問に関する投稿を参照してください。

于 2010-06-30T13:40:21.353 に答える