2009-10-26 9 views
5

मैं एक मोडल डेट पिकर कैसे कार्यान्वित कर सकता हूं?आईफोन एसडीके: एक मोडल डेट पिकर को कैसे कार्यान्वित करें?

मैं क्या करना चाहता हूं जब उपयोगकर्ता टेक्स्ट फ़ील्ड में प्रवेश करता है, तो एक नया दृश्य बनाया जाता है जिसमें उस पर दिनांक पिकर होता है। वहां से, उपयोगकर्ता बातचीत कर सकते हैं और एक तिथि का चयन कर सकते हैं। जब दृश्य बंद हो जाता है तो उसे किसी भी तरह से कॉलर को तारीख वापस करनी चाहिए। क्या यह संभव है?

बीटीडब्ल्यू, मैं स्पेस के कारण अपने मुख्य रूप पर दिनांक पिकर नहीं डाल सकता।

अग्रिम धन्यवाद।

उत्तर

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 के सभी कि बकवास करता है, तो आपके पास अपनी पसंदीदा निब साथ बदला जा सकता। बस डेटपिकर को आईबीओलेट के रूप में घोषित करना सुनिश्चित करें। और आप वास्तव में इसका उपयोग करना चाहते हैं जब:

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

+0

हाय एड, यहां एक नौसिखिया का थोड़ा सा, क्या आप एक कामकाजी डेमो की आपूर्ति कर सकते हैं? सोचो मैं कुछ याद कर रहा हूँ! – jimbo

+0

ज़रूर ... ऊपर दिए गए कोड में क्या गलत है? क्या यह काम नहीं कर रहा है? यह होना चाहिए। –

2

सरल काम कर समाधान:

अपने ज में:

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

अपने मीटर में:

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

संबंधित मुद्दे