2009-10-26 43 views
5

如何实现模式日期选择器?iphone SDK:如何实现模式日期选择器?

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

顺便说一句,我不能把日期选择器放在我的主窗体上,因为空间。

在此先感谢。

回答

12

使用委托人!

页眉:

@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 

中的loadView所有的垃圾可以用NIB如果你愿意更换。只要确保将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]; 
} 
+0

伟大的答案,埃德! – typeoneerror 2010-08-30 01:06:13

+0

嗨,Ed,这里有一位新手,你能否提供一个工作演示?想想我错过了什么! – jimbo 2010-09-23 16:18:01

+0

当然...上面的代码有什么问题?它不工作?这应该。 – 2010-09-23 19:56:23

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

而且而已。 (我在本地测试和工作)

+0

伟大的解决方案。 – GuybrushThreepwood 2012-10-17 14:21:18

相关问题