2012-06-16 3 views
6

У меня есть контроллер табличного представления (среди прочих) ячейка, которая должна представлять дату. Я следил за этим сообщением «How do I make a modal date picker that only covers half the screen?», и у меня он работает с одним большим исключением - я не могу заставить сборщика исчезнуть!Замена ввода UITextField с помощью UIDatePicker

Я попытался зарегистрироваться для события UIControlEventTouchUpOutside, но кажется, что это не генерируется сборщиком (или, по крайней мере, в том режиме, который я использую).

Как узнать, что пользователь завершил выбор даты?

Также есть способ отключить пользователя от ввода непосредственно в UITextField? Я хочу заставить их использовать сборщик. Я видел этот пост «Disable blinking cursor in UITextField?», но есть ли другой способ?

Reagards,

--John

ответ

12

Попробуйте этот код .. я вот положить DatePicker в UITextField .. это будет сделано кнопку в верхнем правом навигационной панели .. поэтому, нажав сделанный Я буду пользователь может уволить datepicker .. другой лучший метод, помещая панель инструментов выше datepicker с нажатой кнопкой. Попробуйте это, это сработает .. при изменении datepicker вы можете заполнить текстовое поле. Надеюсь, что это поможет ..

см. Эту ссылку на stackoverflow https://stackoverflow.com/a/4824319/763747 у этого будет datepicker с done b utton как панель инструментов над клавиатурой.

#pragma mark - 
#pragma mark - TextField Delegate 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return TRUE; 
} 


- (void) textFieldDidBeginEditing:(UITextField *)textField { 
    itsRightBarButton.title = @"Done"; 
    itsRightBarButton.style = UIBarButtonItemStyleDone; 
    itsRightBarButton.target = self; 
    itsRightBarButton.action = @selector(doneAction:); 
    if ([textField isEqual:itsIncidentDateTextField]) 
    { 
     itsDatePicker = [[[UIDatePicker alloc] init] autorelease]; 
     itsDatePicker.datePickerMode = UIDatePickerModeDate; 
     [itsDatePicker addTarget:self action:@selector(incidentDateValueChanged:) forControlEvents:UIControlEventValueChanged]; 
     //datePicker.tag = indexPath.row; 
     textField.inputView = itsDatePicker; 
    } 
} 

- (IBAction) incidentDateValueChanged:(id)sender{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MMM d, yyyy"]; 
    itsIncidentDateTextField.text = [dateFormatter stringFromDate:[itsDatePicker date]]; 
    [dateFormatter release]; 
} 
+0

Я вижу, что это метод, используемый в списке контактов, скажем, если вы добавить день рождения. Мне придется переделать мой взгляд, потому что в настоящее время у меня есть кнопка «Отмена» в качестве элемента правой кнопки. Я попробую. Спасибо за ответ! – johnnyspo

+0

Даже у меня есть кнопка сохранения .. вы можете переключать кнопки. –

+0

Точно то, что я сделал! Еще раз спасибо. – johnnyspo

-2

Я использовал другой метод для удаления UIDatePicker.

создать файл XIB (nib) и добавить к нему UIDatePicker, а затем изменить размер представления, чтобы он соответствовал только UIDatePicker, создать свойство (сделать его сильным и неатомным) в вашем ViewController (или любом классе, который вы используете, и синтезировать конечно).

@property (nonatomic, strong) UIView *myDatePickerView; 
@synthesize myDatePickerView; 

затем создать метод loadDatePickerView

- (void) loadDatePickerView 
{ 
    UINib *nib = [UINib nibWithNibName:kNIBname bundle:[NSBundle mainBundle]]; 
    NSArray *views = [nib instantiateWithOwner:self options:nil]; 
    self.myDatePickerView = [views firstObject]; 
    [myDatePickerView setFrame:CGRectMake(0, 318, 320, 162)]; 
    [self.view addSubview:myDatePickerView]; 
} 

осуществлению UITextFieldDelegate, и в методе textFieldDidBeginEditing вызова метода loadDatePickerView,

[self loadDatePickerView]; 

, чтобы функция создания свойства который является пользовательским интерфейсом DatePicker экземпляр

@property (nonatomic,strong) 

UIDatePicker *myDatePicker; 

(синтез конечно)

Теперь создать IBAction так:

-(IBAction)datePickerValueChanged:(UIDatePicker *)sender 
{ 
    myDatePicker = [[myDatePickerView subviews] lastObject]; 
    //now you can do whatever you want with the DatePicker 
} 

Теперь подключите IBAction к подборщика в файле XIB, таким образом в XIB теперь является экземпляром UIDatePicker, созданным вами в VC, если вы хотите его исчезнуть, вы можете добавить UITapGestureRecognizer (в ViewDidLoad) и s избиратель будет еще один IBAction, который удаляет myDatePickerView из его SuperView так:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(dropPicker:)]; 
    [self.view addGestureRecognizer:tap]; 
    [self datePickerValueChanged:myDatePicker]; 
} 

-(IBAction)dropPicker:(id)sender 
{ 
    [myDatePickerView removeFromSuperview]; 
} 
Смежные вопросы