Скрыть клавиатуру при выборе DatePicker - проблемы не решены - PullRequest
0 голосов
/ 27 февраля 2012

Хорошо, поэтому я просмотрел почти все статьи SO на эту тему и не могу разрешить мою конкретную ситуацию. У меня есть контроллер представления с 3 текстовыми полями и текстовой областью. Одно из текстовых полей для даты. Когда пользователь вводит это поле, я хочу спрятать клавиатуру и показать указатель даты.

Проблема, с которой я до сих пор сталкиваюсь с моим кодом, заключается в том, что клавиатура появляется при вводе любого из полей, но затем не исчезает, независимо от того, что я пробовал.

Я не смог найти пример приложения с такой функцией и хотел бы узнать, как решить эту проблему.

ОБНОВЛЕНИЕ: я исправил первую часть этого и теперь могу скрыть свою клавиатуру, когда доберусь до поля даты.

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

1 Ответ

0 голосов
/ 27 февраля 2012
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

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

       return NO;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...