Вопрос по ios, xcode, uitextfield, uidatepicker – Показать указатель даты в текстовом поле

21

Я очень новичок в iOS, так что, очевидно, ям пропуская несколько понятий при попытке следовать этому решениюОтображение даты выбора при нажатии на текстовое поле к моей проблеме.

У меня есть интерфейс и реализация в классе под названием DatepickerAppDelegate, но яЯ потерял здесь: "

В XIB вытащите UIToolbar и UIDatePicker, но неприкрепить его к представлению. Подключите розетки соответствующим образом. dateChanged: реагирует на изменения в средстве выбора даты, а doneEditing: вызывается при нажатии кнопки «Готово» на панели инструментов. Подключите их тоже. Методы реализованы, как указано ниже. "

Я читал кое-что о XIB 'но яя использую раскадровку, так что я думаю, что я нетогда Также я'я не уверен, как яЯ должен вытащить элементы, не присоединяя его к моим контроллерам вида (япытаюсь, но когда я отпускаю кнопку мыши, инструмент возвращается на панель инструментов), и я недаже не понимаю, зачем мне нужен UIToolbar.

И, наконец, как мне подключить свое текстовое поле к делегату DatePicker?

Кто-нибудь может мне помочь?

ОБНОВИТЬ:

На самом деле это очень просто, мне просто нужно:

datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

self.birthday.inputView = datePicker;

Ваш Ответ

3   ответа
0

нию. Например

CGFloat toolbarHeight = 44.f;
CGFloat datePickerHeight = 140.f;
CGFloat containerViewHeight = toolbarHeight+datePickerHeight;
//create container view for datepicker and toolbar
UIView *containerView = [[UIVIew alloc] initWithFrame:CGRectMake(0.f, [self.view bounds].size.height+containerViewHeight, [self.view bounds].size.width, containerViewHeight)];

//after init toolbar set the frame
toolBar.frame = CGRectMake(0.f,0.f,containerView.frame.size.width, toolbarHeight];
//then add on toolbar button save and release it after add

//after init datePicker set the frame
datePicker.frame = CGRectMake(0.f, toolbarHeight, containerView.frame.size.width, datePickerHeight);

//add datePicker and toolBar to containerView
[containerView addSubview: toolBar];
[containerView addSubview: datePicker];

[toolBar release];
[datePicker release];

//add containerView to main view

[self.view addSubview: containerView];
[containerView release];

Таким образом, когда представление загрузится, они будут скрыты. Y этого представления находится за пределами рамки просмотра.

Теперь вам нужно назначить делегат свойства UITextFieldDelegate

textfield.delegate = self;

В методе делегатаtextFieldDidBeginEditing увидетьUITextFieldDelegate Вы должны запустить метод, который покажет ваш datePicker и панель инструментов. Если у вас много текстовых полей, чтобы определить, какой из них был выбран, используйтетег свойство, которое является целым числом, и вы можете использоватьпереключатель вместо многихесли условия.

Чтобы показать свой datePicker и панель инструментов, вы должны изменить Y кадра containerView. Вот как это сделать

CGRect containerViewFrame = containerView.frame;
containerViewFrame.y -=containerViewHeight;
containerView.frame = containerViewFrame;

Чтобы скрыть только плюс переменную containerViewHeight. Вы можете использовать UIViewAnimations, чтобы показать его с некоторой анимацией. НапримерUIViewAnimationCurveEaseInOut

51

UIResponderиз которогоUITextField наследует,определяет свойство под названиемinputView, Это свойство (UIView *) можно определить вид, который будет отображатьсявместо клавиатуры когда этоUIResponder становится первым респондентом.

Таким образом, если вы хотитеUIDatePicker появляется, когда вы нажимаете на textField (то есть, вы делаете этот textField первым респондентом), то вы можете сказать, чтоVely:

UIDatePicker *datePicker = [[UIDatePicker alloc] init...];
... configure datePicker ...

[myTextField setInputView:datePicker];

Теперь, когда вашUITextField постучал,UIDatePicker будет воспитан вместо

ТЕМ НЕ МЕНИЕ

Вы'Я хочу сделать больше, чем это, потому что выВам нужно будет обрабатывать разные ориентации и разные идиомы.

Но это'это основная идея.

(И если вы хотите панель инструментов надUIDatePicker, тот'с чемinputAccessoryView собственность для ...)

Это именно то, что я сделал, но я забыл обновить пост. lolol
Я написал класс с открытым исходным кодом,STADateFieldна основании этого ответа. Stunner
21

В ViewDidLoad из ViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];

    UIDatePicker *datePicker = [[UIDatePicker alloc]init];
    [datePicker setDate:[NSDate date]];
    datePicker.    [datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged];
    [txtFieldBranchYear setInputView:datePicker];
}

Добавьте один метод в ваш ViewController

-(void) dateTextField:(id)sender
{
    UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView;
    [picker setMaximumDate:[NSDate date]];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    NSDate *eventDate = picker.date;
    [dateFormat setDateFormat:@"dd/MM/yyyy"];

    NSString *dateString = [dateFormat stringFromDate:eventDate];
    txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString];
}

txtFieldBranchYear является выходом UITextField

Отличный ответ. Просто упрощение:txtFieldBranchYear.text = dateString; должен также делать работу. Can Poyrazoğlu

Похожие вопросы