簡體   English   中英

在文本字段點擊上顯示datepicker

[英]Show datepicker on textfield tap

我對iOS很陌生,所以很明顯我在嘗試按照這個解決方案時缺少一些概念顯示datepicker在文本字段上點擊我的問題。

我在一個名為DatepickerAppDelegate的類中有接口和實現,但我在這里丟失了:

“在XIB中,拉出一個UIToolbar和一個UIDatePicker,但不要將它附加到視圖。適當地連接插座.dateChanged:響應日期選擇器和doneEditing的變化:當工具欄中的Done按鈕是點擊。連接它們。方法如下所示。“

我讀了一些關於XIB的東西,但我正在使用故事板,所以我想我沒有。 此外,我不確定如何在不將其附加到視圖控制器的情況下拉出元素(我正在嘗試,但是當我釋放鼠標按鈕時,工具會飛回工具欄),我不知道甚至理解為什么我需要一個UIToolbar。

最后,如何將文本字段連接到datepicker委托?

有人能幫我嗎?

更新:

事實上它很簡單,我只需要:

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

self.birthday.inputView = datePicker;

UITextField繼承的UIResponder 定義了一個名為inputView的屬性 UIResponder成為第一個響應者時,此屬性( UIView * )可以定義將顯示的視圖而不是鍵盤

因此,如果您希望在點擊textField時出現UIDatePicker (即,您將textField作為第一個響應者),那么您可以說,天真地:

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

[myTextField setInputView:datePicker];

現在,當您點擊UITextField時,將啟動UIDatePicker

然而

你需要做的不僅僅是這個,因為你需要處理不同的方向和不同的習語。

但那是基本的想法。

(如果你想在UIDatePicker上面有一個工具欄,那就是inputAccessoryView屬性的用途......)

ViewController.m的 viewDidLoad中

- (void)viewDidLoad {
    [super viewDidLoad];

    UIDatePicker *datePicker = [[UIDatePicker alloc]init];
    [datePicker setDate:[NSDate date]];
    datePicker.datePickerMode = UIDatePickerModeDate;
    [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的出口

在視圖中添加datepicker視圖和uitoolbarview。 例如

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和工具欄的方法。 如果你有許多textFields來定義哪個被選中使用tag屬性,這是整數,你可以使用switch而不是很多if條件。

要顯示datePicker和工具欄,您應該更改containerView框架的Y. 這是怎么做的

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

隱藏加上containerViewHeight變量。 您可以使用UIViewAnimations通過一些動畫顯示它。 例如UIViewAnimationCurveEaseInOut

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM