モーダル日付ピッカーを実装するにはどうすればよいですか?iphone SDK:モーダル日付ピッカーを実装するには?
私がしたいことは、ユーザーがテキストフィールドを入力すると、日付ピッカーが表示された新しいビューが作成されます。そこから、ユーザは対話して日付を選択することができる。ビューが閉じられると、何らかの形で呼び出し元に日付が返されます。これは可能ですか?
ところで、スペースのために私のメインフォームに日付ピッカーを置くことができません。
ありがとうございます。
モーダル日付ピッカーを実装するにはどうすればよいですか?iphone SDK:モーダル日付ピッカーを実装するには?
私がしたいことは、ユーザーがテキストフィールドを入力すると、日付ピッカーが表示された新しいビューが作成されます。そこから、ユーザは対話して日付を選択することができる。ビューが閉じられると、何らかの形で呼び出し元に日付が返されます。これは可能ですか?
ところで、スペースのために私のメインフォームに日付ピッカーを置くことができません。
ありがとうございます。
デリゲートを使用してください。
ヘッダー:
@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];
}
よりシンプルな作業溶液:あなたの.mで
@property (nonatomic,strong) IBOutlet UIDatePicker *datePicker;
@property (weak, nonatomic) IBOutlet UITextField *historyDateSelect;
@property (nonatomic, retain) UIToolbar *dateToolbar;
:あなたの.hで
- (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;
}
そして、それでおしまい。 (私はそれをローカルでテストしています)
すばらしい解決策。 – GuybrushThreepwood
偉大な答え、エド! – typeoneerror
こんにちはエド、ここの初心者のビット、あなたは全くデモを提供することができますか?私は何かが欠けていると思う! – jimbo
確かに...上記のコードで何が問題なのですか?それは働いていないのですか?そうすべき。 –