iphone SDK: How to implement a modal date picker?

后端 未结 2 1864
遥遥无期
遥遥无期 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 01:57

    Simpler working solution:

    In your .h:

    @property (nonatomic,strong) IBOutlet UIDatePicker *datePicker;
    @property (weak, nonatomic) IBOutlet UITextField *historyDateSelect;
    @property (nonatomic, retain) UIToolbar *dateToolbar;
    

    In your .m:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
    
        self.datePicker = [[UIDatePicker alloc]init];
        [self.datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
    
    
        UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil];    
        [toolbar setItems:[NSArray arrayWithObject:doneButton]];
    
        self.dateToolbar = toolbar;
    
        self.historyDateSelect.inputView = self.datePicker;
        self.historyDateSelect.inputAccessoryView = self.dateToolbar;
    }
    

    And that's it. (I tested it locally and works)

    0 讨论(0)
  • 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 <DatePickerControllerDelegate> *delegate;
    }
    
    @property (nonatomic, retain) UIDatePicker *datePicker;
    @property (nonatomic, assign) NSObject <DatePickerControllerDelegate> *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];
    }
    
    0 讨论(0)
提交回复
热议问题