iphone SDK: How to implement a modal date picker?

后端 未结 2 1887
遥遥无期
遥遥无期 2021-02-10 01:23

How can I implement a modal date picker?

What I want to happen is when the user enters a text field, a new view is created that has the date picker on it. From there, t

2条回答
  •  清歌不尽
    2021-02-10 02:10

    Use a delegate!

    Header:

    @class DatePickerController;
    @protocol DatePickerControllerDelegate
    - (void) datePickerController:(DatePickerController *)controller didPickDate:(NSDate *)date;
    @end
    
    @interface DatePickerController : UIViewController {
      UIDatePicker *datePicker;
      NSObject  *delegate;
    }
    
    @property (nonatomic, retain) UIDatePicker *datePicker;
    @property (nonatomic, assign) NSObject  *delegate;
    @end
    

    class:

    @implementation DatePickerController
    - (void) loadView {
      self.view = [[[UIView alloc] init] autorelease];
      self.datePicker = [[[UIDatePicker alloc] init] autorelease];
      [self.view addSubview:self.datePicker];
      UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
      [button setTitle:@"Done" forState:UIControlStateNormal];
      button.center = CGPointMake(160,240);
      [button addTarget:self action:@selector(done) forControlEvents:(UIControlEventTouchUpInside)];
      [self.view addSubview:button];
    }
    
    - (void) done {
      [delegate datePickerController:self didPickDate:datePicker.date];
    }
    
    - (void) dealloc {
      [datePicker release];
      [super dealloc];
    }
    
    @end
    

    All that crap in loadView can be replaced with a NIB if you prefer. Just make sure to declare datePicker as an IBOutlet. And when you want to actually use it:

    - (void) pickDate {
      DatePickerController *screen = [[[DatePickerController alloc] init] autorelease];
      screen.delegate = self;
      [self presentModalViewController:screen animated:YES];
    }
    
    - (void) datePickerController:(DatePickerController *)controller didPickDate:(NSDate *)date {
      [self doSomethingWithDate:date];
      [controller dismissModalViewControllerAnimated:YES];
    }
    

提交回复
热议问题