7

日付を表すセルを (とりわけ) 持つテーブル ビュー コントローラーがあります。この投稿「画面の半分だけをカバーするモーダル日付ピッカーを作成するにはどうすればよいですか? 」をフォローしましたが、1 つの大きな例外を除いて機能しています - ピッカーを非表示にすることはできません!

イベントUIControlEventTouchUpOutsideに登録しようとしましたが、これはピッカーによって(または少なくとも私が使用しているモードでは)生成されないようです。

ユーザーが日付の選択を終了したことをどのように認識できますか?

また、ユーザーが UITextField に直接入力できないようにする方法はありますか? ピッカーの使用を強制したい。「 UITextField でカーソルの点滅を無効にしますか? 」という投稿を見ましたが、別の方法はありますか?

よろしく、

--ジョン

4

2 に答える 2

12

このコードを試してください..ここでは、uitextfieldに日付ピッカーを配置しています..右上のナビゲーションバーに完了ボタンがあります..完了をクリックすると、ユーザーは日付ピッカーを閉じることができます..別の最良の方法は、完了ボタンがある日付ピッカーの上のツールバー..これを試してみてください..日付ピッカーを変更すると、テキストフィールドに入力できます..これが役立つことを願っています..

このstackoverflowリンクを参照してくださいhttps://stackoverflow.com/a/4824319/763747 これにより、キーボードの上にツールバーとして完了ボタンが付いた日付ピッカーが表示されます..

#pragma mark -
#pragma mark - TextField Delegate

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{
    [textField resignFirstResponder];
    return TRUE;
}


- (void) textFieldDidBeginEditing:(UITextField *)textField {
    itsRightBarButton.title  = @"Done";
    itsRightBarButton.style = UIBarButtonItemStyleDone;
    itsRightBarButton.target = self;
    itsRightBarButton.action = @selector(doneAction:);
    if ([textField isEqual:itsIncidentDateTextField])
    {
        itsDatePicker = [[[UIDatePicker alloc] init] autorelease];
        itsDatePicker.datePickerMode = UIDatePickerModeDate;
        [itsDatePicker addTarget:self action:@selector(incidentDateValueChanged:) forControlEvents:UIControlEventValueChanged];
        //datePicker.tag = indexPath.row;
        textField.inputView = itsDatePicker;
    }
}

- (IBAction) incidentDateValueChanged:(id)sender{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMM d, yyyy"];
    itsIncidentDateTextField.text = [dateFormatter stringFromDate:[itsDatePicker date]];
    [dateFormatter release];
}
于 2012-06-16T19:37:08.480 に答える
-2

UIDatePicker を非表示にする別の方法を使用しました。

XIB (nib) ファイルを作成し、それに UIDatePicker を追加してから、ビューのサイズを変更して UIDatePicker のみに収まるようにし、ViewController (または使用している任意のクラス) にプロパティを作成 (強力で非アトミックにする) し、もちろん合成します)。

@property (nonatomic, strong) UIView *myDatePickerView;  
@synthesize myDatePickerView;

次に、loadDatePickerView メソッドを作成します

- (void) loadDatePickerView
{
    UINib *nib = [UINib nibWithNibName:kNIBname bundle:[NSBundle mainBundle]];
    NSArray *views = [nib instantiateWithOwner:self options:nil];
    self.myDatePickerView = [views firstObject];
    [myDatePickerView setFrame:CGRectMake(0, 318, 320, 162)];
    [self.view addSubview:myDatePickerView];
}

UITextFieldDelegate を実装し、textFieldDidBeginEditing メソッドで loadDatePickerView メソッドを呼び出し

[self loadDatePickerView];

関数にUIDatePicker インスタンスであるプロパティを作成させる

@property (nonatomic,strong) 

UIDatePicker *myDatePicker;

(もちろん合成)

次のようにIBActionを作成します。

-(IBAction)datePickerValueChanged:(UIDatePicker *)sender
{
    myDatePicker = [[myDatePickerView subviews] lastObject];
    //now you can do whatever you want with the DatePicker
}

IBAction を XIB ファイルのピッカーに接続します。これにより、XIB は VC で作成した UIDatePicker インスタンスになり、非表示にしたい場合は、UITapGestureRecognizer (ViewDidLoad 内)を追加でき、セレクターは別の IBAction になります。次のように、そのスーパービューから myDatePickerView を削除します。

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self     action:@selector(dropPicker:)];
    [self.view addGestureRecognizer:tap];
    [self datePickerValueChanged:myDatePicker];
}

-(IBAction)dropPicker:(id)sender
{
    [myDatePickerView removeFromSuperview];
} 
于 2013-12-15T18:56:39.960 に答える