2009-10-26 12 views
5

Modal bir tarih seçiciyi nasıl uygularım?iphone SDK: Bir modal tarih seçici nasıl uygulanır?

Olmak istediğim, kullanıcı bir metin alanına girdiğinde, tarih seçiciye sahip yeni bir görünüm oluşturulur. Buradan, kullanıcı bir tarihle etkileşim kurabilir ve seçebilir. Görünüm kapandığında, tarihi bir şekilde arayan kişiye iade etmelidir. Mümkün mü?

BTW, Tarih seçiciyi alan yüzünden ana formuma koyamıyorum.

Şimdiden teşekkürler.

cevap

12

Bir temsilci kullanın!

Başlık:

@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 

sınıfı: İsterseniz

@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 Tüm bu bok bir ELVES ile değiştirilebilir. Sadece datePicker'ı bir IBOutlet olarak bildirdiğinizden emin olun. Ve aslında kullanmak istediğinizde:

- (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

Harika cevap, Ed! – typeoneerror

+0

Merhaba Ed, burada bir acemi biraz, çalışan bir demo kaynağı olabilir misiniz? Sanırım bir şey özlüyorum! – jimbo

+0

Elbette ... Yukarıdaki kodla ilgili sorun nedir? Çalışmıyor mu? Olması gerekiyor. –

2

basit çalışma çözeltisi: senin .m olarak

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

: senin .h olarak

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

Ve bu kadar. (Yerel olarak test ettim ve çalışıyor)

+0

Harika bir çözüm. – GuybrushThreepwood

İlgili konular