iPhone 在 UITextField touch 上显示日期选择器 [英] iPhone display date picker on UITextField touch

查看:18
本文介绍了iPhone 在 UITextField touch 上显示日期选择器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我关注了这个帖子:点击文本字段的日期选择器

我导入了以下两个协议:

I imported both of the following protocols:

@interface ViewController : UIViewController<UIActionSheetDelegate, UITextFieldDelegate> {

然后,在实现中,我使用了以下内容:

Then, in the implementation, I use the following:

- (void)viewDidLoad {

    textField.delegate = self;

[super viewDidLoad] }

最后,我将实际代码用于显示日期选择器(来自线程).我也在 IB 中将其全部链接起来.

Lastly, I put the actual code to display the date picker (from the thread). I also linked it all up in the IB.

    //Date Picker
- (void)textFieldDidBeginEditing:(UITextField *)aTextField{    
    [aTextField resignFirstResponder];  

    pickerViewPopup = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];  

    UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 0, 0)];  
    pickerView.datePickerMode = UIDatePickerModeDate;  
    pickerView.hidden = NO;  
    pickerView.date = [NSDate date];  

    UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];  
    pickerToolbar.barStyle = UIBarStyleBlackOpaque;  
    [pickerToolbar sizeToFit];  

    NSMutableArray *barItems = [[NSMutableArray alloc] init];  

    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];  
    [barItems addObject:flexSpace];  

    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];  
    [barItems addObject:doneBtn];  

    UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];  
    [barItems addObject:cancelBtn];  

    [pickerToolbar setItems:barItems animated:YES];  

    [pickerViewPopup addSubview:pickerToolbar];  
    [pickerViewPopup addSubview:pickerView];  
    [pickerViewPopup showInView:self.view];  
    [pickerViewPopup setBounds:CGRectMake(0,0,320, 464)];    
}  

-(void)doneButtonPressed:(id)sender{  
    //Do something here here with the value selected using [pickerView date] to get that value  
        [pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES];  
}  

-(void)cancelButtonPressed:(id)sender{  
    [pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES];  
}  

然而,当我点击 UITextField 时,我得到了这个:

However, when I click on the UITextField, I get this:

我做错了什么?

推荐答案

您可以使用 UITextField 输入视图属性.只需在代码中分配初始化一个常规的 UIDatePicker 并将其分配给文本字段的 inputView.这样做时,将显示 UIPickerView 而不是键盘.如果您需要任何代码,请随时询问:)

You could use the UITextField input view property. Just alloc init a regular UIDatePicker in code and assign it to the textfield's inputView. Doing this, the UIPickerView will be presented instead of the keyboard. If you need any code feel free to ask :)

代码

你把你的 textField 与 IB 连接起来

You fist hook up your textField with IB

@interface myViewController <UITextFieldDelegate>
@property (nonatomic,weak) IBOutlet UITextField *myTextField;
@end 

在实施中

UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
if (@available(iOS 13.4, *)) {
    [datePicker setPreferredDatePickerStyle:UIDatePickerStyleWheels];
}       
[self.myTextField setInputView:datePicker];

当您点击 textField 时,会出现一个 UIDatePicker.请注意我添加到 datePicker 的操作.

That will bring up a UIDatePicker when you tap on the textField. Note the action that I added to the datePicker.

[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];

要在每次用户在选择器中滚动时更新 textField,您只需要在 viewController

To update the textField each time that the user scrolls in the picker, you just need to implement the updateTextField method somewhere in the viewController

-(void)updateTextField:(id)sender
{
  UIDatePicker *picker = (UIDatePicker*)self.myTextField.inputView;
  self.myTextField.text = [NSString stringWithFormat:@"%@",picker.date];
}

使用最后一种方法,每次用户旋转选择器时,文本字段都会更新!

With this last method, every time the user rotates the picker, the textfield will update!

  • 您可以使用 NSDateFormatter 来改进字符串的输出.
  • You could use a NSDateFormatter to improve the output of the string.

这篇关于iPhone 在 UITextField touch 上显示日期选择器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆