2012-02-27 32 views
0

好吧,我已经阅读了关于此主题的所有SO文章,并且无法解决我的特殊情况。我有一个视图控制器有3个文本字段和一个文本区域。其中一个文本字段用于日期。当用户进入该字段时,我想隐藏键盘并显示日期选择器。当选择DatePicker时隐藏键盘 - 问题未解决

到目前为止,我用我的代码遇到的问题是,当我进入任何字段时键盘出现,但不管我尝试过什么都不会消失。

我找不到任何具有此功能的示例应用程序,并希望找到解决此问题的方向。

更新:我解决了这个问题的第一部分,现在可以隐藏我的键盘,当我到达日期字段。

Here is what it looks like when I click on the date field

这是使用下面的代码:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 

{

if (textField.tag == 1) 
{ 

    [self.view endEditing:TRUE]; 

    [lblDesc2 resignFirstResponder]; 
    [lblTitle resignFirstResponder]; 
    [lblExcerpt resignFirstResponder]; 

    NSLog(@"The method was called for textField "); 

    [self showDatePicker]; 
    return NO; 
} 
else 
{ 
    return YES; 
} 

} 

现在我需要做的就是拉起日期选择器,这里是我的代码这还没有工作:

- (void) showDatePicker{ 

CGRect pickerFrame = CGRectMake(0,250,325,0); 

datePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame]; 
[datePicker addTarget:self action:@selector(pickerChanged:)    forControlEvents:UIControlEventValueChanged]; 

[scrollView addSubview:datePicker]; 

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
df.dateStyle = NSDateFormatterMediumStyle; 

datePicker.datePickerMode = UIDatePickerModeDate; 

[datePicker release]; 


} 

.H

#import <UIKit/UIKit.h> 
    #import "QuoteViewController.h" 
    #import "SubjectViewController.h" 
    #import "CategoryViewController.h" 

    @class Quote, SubjectViewController, QuoteViewController; 

    @interface AddQuoteViewController : UIViewController <UITextFieldDelegate>{ 

    @private 
     UIDatePicker *datePicker; 
     UIBarButtonItem *doneButton; // this button appears only when the date picker is open 
     NSArray *dataArray; 
     NSDateFormatter *dateFormatter; 

     IBOutlet UITextField *lblTitle; 
     IBOutlet UITextField *lblDesc2; 
     IBOutlet UITextField *lblDate; 
     IBOutlet UITextView *lblExcerpt; 
     IBOutlet UITextField *lblNote; 
     QuoteViewController *qvc; 
     SubjectViewController *svc; 
     //UITextField *editingField; 
     IBOutlet UIScrollView *scrollView; 

    } 


    @property (nonatomic, retain) UIScrollView *scrollView; 
    @property (nonatomic, retain) IBOutlet UIDatePicker *datePicker; 
    @property (nonatomic, retain) IBOutlet UIBarButtonItem *doneButton; 

    @property (nonatomic, retain) NSArray *dataArray; 
    @property (nonatomic, retain) NSDateFormatter *dateFormatter; 

    //- (IBAction)doneAction:(id)sender; // when the done button is clicked 
    //- (IBAction)dateAction:(id)sender; // when the user has changed the date picke values (m/d/y) 

    @property (nonatomic,assign) QuoteViewController *qvc; 
    @property (nonatomic,assign) SubjectViewController *svc; 

    @end 

的.m

#import "AddQuoteViewController.h" 
    #import "Category.h" 
    #import "QuotesAppDelegate.h" 
    #import "Quote.h" 
    #import "QuoteMap.h" 


    @implementation AddQuoteViewController 

    @synthesize svc, qvc; 
    @synthesize datePicker, doneButton, dataArray, dateFormatter, scrollView; 


    // Implement viewDidLoad to do additional setup after loading the view. 
    - (void)viewDidLoad { 
     [super viewDidLoad]; 

     self.title = @"Add Quote"; 

     self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] 
                initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
                target:self action:@selector(cancel_Clicked:)] autorelease]; 

     self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] 
                initWithBarButtonSystemItem:UIBarButtonSystemItemSave 
                target:self action:@selector(save_Clicked:)] autorelease]; 

     self.view.backgroundColor = [UIColor groupTableViewBackgroundColor]; 

     self.dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
     [self.dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
     [self.dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

     CGRect pickerFrame = CGRectMake(0,250,325,0); 

     datePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame]; 
     [datePicker addTarget:self action:@selector(pickerChanged:)    forControlEvents:UIControlEventValueChanged]; 

     [scrollView addSubview:datePicker]; 

     NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     df.dateStyle = NSDateFormatterMediumStyle; 

     datePicker.datePickerMode = UIDatePickerModeDate; 

     lblDate.tag = 1; 

     [datePicker release]; 

    } 


    - (void) viewWillAppear:(BOOL)animated { 
     [super viewWillAppear:animated]; 

     //Set the textboxes to empty string. 

     //Display the selected quote. 
     lblExcerpt.text = @""; 
     lblTitle.text = @""; 
     lblDesc2.text = @""; 
     lblDate.text = @""; 

     NSLog(@"AddQuoteViewController initialized..."); 

     //Make the Category name textfield to be the first responder. 
    // [lblTitle becomeFirstResponder]; 
    } 


    - (void)pickerChanged:(id)sender 
    { 

     NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     df.dateStyle = NSDateFormatterMediumStyle; 
     lblDate.text = [NSString stringWithFormat:@"%@", 
          [df stringFromDate:datePicker.date]]; 

     NSLog(@"value: %@",[sender date]); 
    } 


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 

if (textField.tag == 1) 
{ 

    [self.view endEditing:TRUE]; 

    [lblDesc2 resignFirstResponder]; 
    [lblTitle resignFirstResponder]; 
    [lblExcerpt resignFirstResponder]; 

    NSLog(@"The method was called for textField "); 

    [self showDatePicker]; 
    return NO; 
} 
else 
{ 
    return YES; 
} 
} 
    - (void)viewDidUnload 
    { 
     self.dataArray = nil; 
     self.dateFormatter = nil; 
    } 



    - (void)dealloc { 
     [lblTitle release]; 
     [lblDesc2 release]; 
     [lblDate release]; 
     [lblExcerpt release]; 
     [doneButton release]; 
     [dataArray release]; 
     [scrollView release]; 
     [datePicker release]; 
     [dateFormatter release]; 
     [super dealloc]; 
    } 

    @end 

回答

0
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 

//do what you want to do when user is touching the textfield. e.g. Display the DatePicker 

     return NO; 

} 
+0

感谢这解决了这一问题的第一部分。现在我需要拉起我的日期选择器,这是不显示,只是一个空白的灰色背景后面的键盘是... – jroyce 2012-02-27 02:41:25

+0

你可以把一个截图? – 2012-02-27 02:44:23

+0

CGRectMake(0,250,325,0);应该是(0,0,320,250) – 2012-02-27 02:49:29