我正在使用埃德·马蒂回答这个问题的代码here https://stackoverflow.com/questions/1624866/iphone-sdk-how-to-implement-a-modal-date-picker但我在一些方面遇到了真正的麻烦。
单击按钮后,我出现了日期选择器,但“完成”按钮却没有出现。我还从该行收到错误:
[delegate datePickerController:controller didPickDate:datePicker.date];
错误信息:
“控制器”未声明(在此函数中首次使用)
我总共有 6 个文件:
- ModalDatePickerViewController.m
- 模态日期选择器ViewController.h
- ModalDatePickerAppDelegate.m
- 模态 DatePicker AppDelegate.h
- DatePickerController.m
- 日期选择器控制器.h
我的 DatePickerController.h 看起来像:
#import <UIKit/UIKit.h>
@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
和 DatePickerController.m:
#import "DatePickerController.h"
@implementation DatePickerController
@synthesize datePicker;
@synthesize delegate;
- (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,230);
[button addTarget:self action:@selector(done) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:button];
}
- (void) done {
[delegate datePickerController:controller didPickDate:datePicker.date];
}
- (void) dealloc {
[datePicker release];
[super dealloc];
}
@end
在主视图上,我有一个调用此类的按钮,如下所示:
#import "ModalDatePickerViewController.h"
@implementation ModalDatePickerViewController
- (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];
}
- (IBAction)HitMe:(id)sender {
[self pickDate];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
}
- (void)dealloc {
[super dealloc];
}
@end
and:
#import <UIKit/UIKit.h>
#import "DatePickerController.h"
@interface ModalDatePickerViewController : UIViewController <DatePickerControllerDelegate> {
}
- (IBAction)HitMe:(id)sender;
@end