27

初めて UIDatePickers を操作します。まず、datePicker (カウント ダウン モードで設定) から選択された値でテキスト フィールドを更新しようとしています。

機能しますが、ユーザーが時間を選択するのは 2 回目だけです。私のアクション、durationSelected() は 2 回目にしか呼び出されないため、textField の更新に問題はありません。

ストーリーボードで日付ピッカーを構成する方法は次のとおりです。

ここに画像の説明を入力

ここに画像の説明を入力

値が変更されたときにトリガーされるアクションは次のとおりです。

DetailViewController.m から

- (IBAction)durationSelected:(UIDatePicker *)sender
{
    self.durationTextField.text = [NSString stringWithFormat:@"%f seconds", sender.countDownDuration];
}

デフォルト値を設定しようとしましたが、効果はありませんでした。

どうしたの?

4

8 に答える 8

24

iOS 7.0.3 の UIDatePicker を UIDatePickerModeCountDownTimer モードで使用すると、同様のバグが発生します。ピッカーは、ユーザーがホイールをスクロールして値を初めて変更したときに、UIControlEventValueChanged イベントに関連付けられたターゲット アクションを起動しません。その後の変更では問題なく機能します。

以下は効率的な回避策です。countDownDuration の初期値を設定するコードをディスパッチ ブロックでメイン ループに入れるだけです。ホイールが新しい値に回転するたびに、ターゲット アクション メソッドが起動します。このアプローチにはオーバーヘッドがほとんどなく、iPhone 4 および iPad 4 で非常にうまく機能します。

dispatch_async(dispatch_get_main_queue(), ^{
    self.myDatePicker.countDownDuration = (NSTimeInterval) aNewDuration ;
});
于 2013-11-25T22:03:00.147 に答える
16

これは、UIDatePicker の iOS 7 実装のバグのようです。レーダーを付けることをお勧めします。

iOS 6 SDK でのビルドと iOS 6 デバイスでの実行は機能しますが、iOS 7 デバイスでの実行は機能しません。

このコード行を- (void)viewDidLoadメソッドに追加することで修正できます

[self.datePicker setDate:[NSDate date] animated:YES];
于 2013-10-18T05:33:21.807 に答える
4

よくわかりませんが、それは経験に基づいた推測です:

iOS は、ホイールのアニメーションによって発生した場合にのみ、Date Picker の値の変更を追跡している可能性があります。したがって、最初の「ロール」で値を設定しますが、2番目に変更されたもののみを検出します。

私が言ったように、私はその理由を確信することはできませんが、修正は簡単なはずですsetDate: animated:.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.picker setDate:[NSDate dateWithTimeIntervalSinceNow:0] animated:true ];   
}

それは私のために働いているようです。

于 2013-10-16T19:47:59.443 に答える