Я использую код из ответа Эда Марти на вопрос здесь , но у меня возникли реальные проблемы с несколькими битами.
При нажатии кнопки появляется окно выбора даты, но кнопка «Готово» не отображается.Я также получаю сообщение об ошибке:
[delegate datePickerController:controller didPickDate:datePicker.date];
Сообщение об ошибке:
'контроллер' необъявлен (первое использование в этой функции)
Всего у меня 6 файлов:
- ModalDatePickerViewController.m
- ModalDatePickerViewController.h
- ModalDatePickerAppDelegate.m
- ModalDatePickerAppD*
- DatePickerController.m
- DatePickerController.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
и:
#import <UIKit/UIKit.h>
#import "DatePickerController.h"
@interface ModalDatePickerViewController : UIViewController <DatePickerControllerDelegate> {
}
- (IBAction)HitMe:(id)sender;
@end