【问题标题】:iphone SDK: How to implement a modal date picker?iphone SDK:如何实现模态日期选择器?
【发布时间】:2010-12-10 03:20:24
【问题描述】:

如何实现模态日期选择器?

我想要发生的是当用户输入文本字段时,会创建一个新视图,其中包含日期选择器。从那里,用户可以交互并选择一个日期。当视图关闭时,它应该以某种方式将日期返回给它的调用者。这可能吗?

顺便说一句,由于空间,我无法将日期选择器放在主窗体上。

提前致谢。

【问题讨论】:

    标签: iphone


    【解决方案1】:

    使用委托!

    标题:

    @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
    

    类:

    @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
    

    如果您愿意,可以用 NIB 替换 loadView 中的所有废话。只需确保将 datePicker 声明为 IBOutlet。 当你想实际使用它时:

    - (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];
    }
    

    【讨论】:

    • 嗨,Ed,这里有点新手,你能提供一个工作演示吗?觉得我错过了什么!
    • 当然……上面的代码有什么问题?它不工作吗?它应该。
    • 我不认为有什么问题,我似乎无法让它工作,但我可能把东西放在错误的地方,知道我......简单的工作例子会很棒,因为我在网上找不到任何例子......
    • 嗨 Ed,我快到了...我创建了一个新帖子 stackoverflow.com/questions/3820706/…
    【解决方案2】:

    更简单的工作解决方案:

    在您的 .h 中:

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

    在你的 .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;
    }
    

    就是这样。 (我在本地测试过并且可以工作)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2021-10-05
      • 2016-04-28
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      相关资源
      最近更新 更多