2012-02-27 27 views
0

これで、この件に関するすべてのSOの記事を読んだので、特定の状況を解決できません。私は3つのテキストフィールドとテキストエリアを持つビューコントローラを持っています。テキストフィールドの1つは日付用です。ユーザーがこのフィールドを入力すると、キーボードを非表示にして日付選択ツールを表示します。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

+0

あなたはスクリーンショットを置くことができますか? –

+0

CGRectMake(0,250,325,0); (0,0,320,250) –

関連する問題