我需要在日期选择器中添加一个“完成”按钮,如下图所示:
这是我的代码:
-(IBAction)chooseDate:(id)sender{
self.datepicker= [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)];
self.datepicker.datePickerMode = UIDatePickerModeDate;
datepicker.backgroundColor = Rgb2UIColor(52, 170, 220);
[self.btnDone
addTarget:self
action:@selector(SetDatePickerTime:)
forControlEvents:UIControlEventTouchDown];
[self.view addSubview:self.datepicker];
}
答案 0 :(得分:15)
使用Swift
// Place this code inside your ViewController or where you want ;)
var txtField: UITextField = UITextField(frame: CGRectMake(0, 0, 200, 50))
// the formatter should be "compliant" to the UIDatePickerMode selected below
var dateFormatter: NSDateFormatter {
let formatter = NSDateFormatter()
// customize the locale for the formatter if you want
//formatter.locale = NSLocale(localeIdentifier: "it_IT")
formatter.dateFormat = "dd/MM/yyyy"
return formatter
}
override func viewDidLoad() {
super.viewDidLoad()
// date picker setup
let datePickerView:UIDatePicker = UIDatePicker()
// choose the mode you want
// other options are: DateAndTime, Time, CountDownTimer
datePickerView.datePickerMode = UIDatePickerMode.Date
// choose your locale or leave the default (system)
//datePickerView.locale = NSLocale.init(localeIdentifier: "it_IT")
datePickerView.addTarget(self, action: "onDatePickerValueChanged:", forControlEvents: UIControlEvents.ValueChanged)
txtField.inputView = datePickerView
// datepicker toolbar setup
let toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.Default
toolBar.translucent = true
let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: "doneDatePickerPressed")
// if you remove the space element, the "done" button will be left aligned
// you can add more items if you want
toolBar.setItems([space, doneButton], animated: false)
toolBar.userInteractionEnabled = true
toolBar.sizeToFit()
txtField.inputAccessoryView = toolBar
self.view.addSubview(txtField)
}
func doneDatePickerPressed(){
self.view.endEditing(true)
}
func onDatePickerValueChanged(datePicker: UIDatePicker) {
self.txtField = dateFormatter.stringFromDate(datePicker.date)
}
答案 1 :(得分:8)
创建日期选择器,然后将其添加为相关字段的输入视图(self.fieldInQuestion.inputView = datePicker
)。接下来,创建一个UIToolBar
(高度44),其上带有UIBarButton
项,标题为"完成",自我的目标和选择器(例如@selector(已完成)) 。将此添加为您将日期选择器作为(self.fieldInQuestion.inputAccessoryView = UIToolbarInstance
)的输入视图的同一字段的输入附件视图。在选择器方法( - 上面的例子中完成的 - (void))中,请确保使用[self.fieldInQuestion resignFirstResponder]并将其关闭。
答案 2 :(得分:4)
你问题的参考图片显示应用程序正在使用UIToolbar,我将假设当点击日期文本字段时,会出现带有完成按钮的日期选择器。对于此 some.h文件
/*****keyboard Done button ***/
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
IBOutlet UIDatePicker *picker1;
IBOutlet UITextField *txtFld;
}
@property (nonatomic, retain) UIToolbar *keyboardToolbar;
@end
在some.m文件中
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
picker1=[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];//frames are just for demo
[txtFld setInputView:picker1];
}
- (void)keyboardWillShow:(NSNotification *)notification
{
if(keyboardToolbar == nil) {
keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 410, 320, 44)] ;
[keyboardToolbar setBarStyle:UIBarStyleBlackTranslucent];
[keyboardToolbar sizeToFit];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.4];
UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton1 =[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(resignKeyboard)];
NSArray *itemsArray = [NSArray arrayWithObjects:flexButton,doneButton1, nil];
[keyboardToolbar setItems:itemsArray];
[txtFld setInputAccessoryView:keyboardToolbar];
[self.view addSubview:keyboardToolbar];
[UIView commitAnimations];
}
}
-(void)resignKeyboard {
[keyboardToolbar removeFromSuperview];
[txtFld resignFirstResponder];
///do nescessary date calculation here
}
答案 3 :(得分:3)
在Swift 5中
//Create this variable
var picker:UIDatePicker?
//Write Date picker code
picker = UIDatePicker()
dobTF.inputView = picker//Change your textfield name
picker?.addTarget(self, action: #selector(handleDatePicker), for: .valueChanged)
picker?.datePickerMode = .date
//Write toolbar code for done button
let toolBar = UIToolbar()
toolBar.barStyle = .default
toolBar.isTranslucent = true
let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(onClickDoneButton))
toolBar.setItems([space, doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
toolBar.sizeToFit()
dobTF.inputAccessoryView = toolBar
//Date picker function
@objc func handleDatePicker() {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy" //Change your date formate
let strDate = dateFormatter.string(from: picker!.date)
dobTF.text = strDate
}
//Toolbar done button function
@objc func onClickDoneButton() {
self.view.endEditing(true)
}
答案 4 :(得分:0)
我做!!!!
-(IBAction)ChooseDate:(id)sender{
btnDone = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[done setTitle:@"GO!" forState:UIControlStateNormal];
btnDone.backgroundColor = UIColorFromRGB(0x1F1F21);
btnDone.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[btnDone addTarget:self
action:@selector(HidePicker:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnDone];
self.datepicker= [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)];
self.datepicker.datePickerMode = UIDatePickerModeDate;
datepicker.backgroundColor = Rgb2UIColor(52, 170, 220);
[self.view addSubview:self.datepicker];
}
-(IBAction)HidePicker:(id)sender{
[UIView animateWithDuration:0.5
animations:^{
datepicker.frame = CGRectMake(0, -250, 320, 50);
} completion:^(BOOL finished) {
[datepicker removeFromSuperview];
[btnDone removeFromSuperview];
}];
[self.datepicker removeFromSuperview];
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"ddMMyyyy"];
//NSLOG
NSLog(@"%@",[outputFormatter stringFromDate:self.datepicker.date]);
}
答案 5 :(得分:0)
创建一个UIView并将其添加到主视图中。将UIDatePicker添加到新的UIView。将两个UIButtons添加到UIView。