MrH*_*hma 24 iphone protocols datepicker uitextfield
我按照这个帖子:datepicker点击文本字段
我导入了以下两种协议:
@interface ViewController : UIViewController<UIActionSheetDelegate, UITextFieldDelegate> {
Run Code Online (Sandbox Code Playgroud)
然后,在实现中,我使用以下内容:
- (void)viewDidLoad {
textField.delegate = self;
[super viewDidLoad] }
Run Code Online (Sandbox Code Playgroud)
最后,我将实际代码显示日期选择器(来自线程).我也把它全部联系在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];
}
Run Code Online (Sandbox Code Playgroud)
但是,当我点击UITextField时,我得到了这个:

我究竟做错了什么?
tom*_*cca 64
您可以使用UITextField输入视图属性.只需UIDatePicker在代码中分配init一个常规代码并将其分配给textfield的inputView.这样做,UIPickerView将呈现而不是键盘.如果您需要任何代码随时问:)
编辑:代码
你textField用IB 拳头连接起来
@interface myViewController <UITextFieldDelegate>
@property (nonatomic,weak) IBOutlet UITextField *myTextField;
@end
Run Code Online (Sandbox Code Playgroud)
在实施中
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
[self.myTextField setInputView:datePicker];
Run Code Online (Sandbox Code Playgroud)
UIDatePicker当你点击它时,这将带来一个textField.请注意我添加到datePicker的操作.
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)
要在每次用户在选择器中滚动时更新textField,您只需要在其中的updateTextField某个位置实现该方法viewController
-(void)updateTextField:(id)sender
{
UIDatePicker *picker = (UIDatePicker*)self.myTextField.inputView;
self.myTextField.text = [NSString stringWithFormat:@"%@",picker.date];
}
Run Code Online (Sandbox Code Playgroud)
使用最后一种方法,每次用户旋转选择器时,文本字段都会更新!
NSDateFormatter来改善字符串的输出.JRo*_*JRo 12
以下是我显示日期选择器的方式.
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
self.activeTextField = textField;
// Create a date picker for the date field.
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
datePicker.datePickerMode = UIDatePickerModeDate;
datePicker.minimumDate = [NSDate dateWithTimeIntervalSinceNow:-31536000];
[datePicker setDate:[NSDate date]];
[datePicker addTarget:self action:@selector(updateDateField:) forControlEvents:UIControlEventValueChanged];
// If the date field has focus, display a date picker instead of keyboard.
// Set the text to the date currently displayed by the picker.
if (textField.tag == 1)
{
self.date.inputView = datePicker;
self.date.text = [self formatDate:datePicker.date];
}
}
// Called when the date picker changes.
- (void)updateDateField:(id)sender
{
UIDatePicker *picker = (UIDatePicker*)self.date.inputView;
self.date.text = [self formatDate:picker.date];
}
// Formats the date chosen with the date picker.
- (NSString *)formatDate:(NSDate *)date
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setDateFormat:@"MM'/'dd'/'yyyy"];
NSString *formattedDate = [dateFormatter stringFromDate:date];
return formattedDate;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
这是我在 Swift 4 中所做的:
let datePicker = UIDatePicker()
@IBOutlet weak var myTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
setDatePicker()
}
func setDatePicker() {
//Format Date
datePicker.datePickerMode = .date
//ToolBar
let toolbar = UIToolbar();
toolbar.sizeToFit()
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(doneDatePicker));
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelDatePicker));
toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false)
myTextField.inputAccessoryView = toolbar
myTextField.inputView = datePicker
}
@objc func doneDatePicker(){
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy"
myTextField.text = formatter.string(from: datePicker.date)
self.view.endEditing(true)
}
@objc func cancelDatePicker(){
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61692 次 |
| 最近记录: |