[英]Date Picker on a button click in IOS
我知道這個問題被問了很多次,但我面臨一個問題,當我點擊按鈕時我的日期選擇器沒有打開,選擇后我想在標簽中顯示它的值。 我的代碼是,
datepicker = [[UIDatePicker alloc]init];
datepicker.datePickerMode = UIDatePickerModeDate;
UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height - 216 - 44, self.view.frame.size.width, 44)];
[toolBar setTintColor:[UIColor blackColor]];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(ShowSelectedDate)];
UIBarButtonItem *space = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[toolBar setItems:[NSArray arrayWithObjects:doneBtn,space,nil]];
// _label1.text:datepicker.date;
-(void)ShowSelectedDate {
NSDateFormatter *fromatter = [[NSDateFormatter alloc]init];
[fromatter setDateFormat:@"dd/mm/yyyy"];
_label1.text = [NSString stringWithFormat:@"%@",[fromatter stringFromDate:datepicker.date]];
[_label1 resignFirstResponder];
}
您將為您的按鈕創建一個IBAction
以調用以顯示UIDatePicker
。 然后實現UIDatePicker
委托方法並設置標簽的文本。
目標 C
全局定義
UIToolbar* toolbar;
UIDatePicker* picker;
在你的頭文件中:
-(IBAction)showDatePicker:(id)sender;
在您的實現文件中
- (IBAction)showDatePicker:(id)sender {
picker = [[UIDatePicker alloc] init];
picker.backgroundColor = [UIColor whiteColor];
[picker setValue:[UIColor blackColor] forKey:@"textColor"];
picker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
picker.datePickerMode = UIDatePickerModeDate;
[picker addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged];
picker.frame = CGRectMake(0.0, [UIScreen mainScreen].bounds.size.height - 300, [UIScreen mainScreen].bounds.size.width, 300);
[self.view addSubview:picker];
toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 300, [UIScreen mainScreen].bounds.size.width, 50)];
toolbar.barStyle = UIBarStyleBlackTranslucent;
toolbar.items = @[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(onDoneButtonClick)]];
[toolbar sizeToFit];
[self.view addSubview:toolbar];
}
-(void) dueDateChanged:(UIDatePicker *)sender {
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSLog(@"Picked the date %@", [dateFormatter stringFromDate:[sender date]]);
YOUR_LABEL.TEXT = [dateFormatter stringFromDate:[sender date]];
}
-(void)onDoneButtonClick {
[toolbar removeFromSuperview];
[picker removeFromSuperview];
}
斯威夫特 4.2
全局定義
var toolBar = UIToolbar()
var datePicker = UIDatePicker()
在您的按鈕操作中編寫代碼。
@IBAction func showDatePicker(_ sender: UIButton) {
datePicker = UIDatePicker.init()
datePicker.backgroundColor = UIColor.white
datePicker.autoresizingMask = .flexibleWidth
datePicker.datePickerMode = .date
datePicker.addTarget(self, action: #selector(self.dateChanged(_:)), for: .valueChanged)
datePicker.frame = CGRect(x: 0.0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 300)
self.view.addSubview(datePicker)
toolBar = UIToolbar(frame: CGRect(x: 0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 50))
toolBar.barStyle = .blackTranslucent
toolBar.items = [UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil), UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.onDoneButtonClick))]
toolBar.sizeToFit()
self.view.addSubview(toolBar)
}
@objc func dateChanged(_ sender: UIDatePicker?) {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .none
if let date = sender?.date {
print("Picked the date \(dateFormatter.string(from: date))")
}
}
@objc func onDoneButtonClick() {
toolBar.removeFromSuperview()
datePicker.removeFromSuperview()
}
雖然問題是針對 Objective-C,但我對Swift 5.0 的回答
private lazy var datePicker : UIDatePicker = {
let datePicker = UIDatePicker()
datePicker.translatesAutoresizingMaskIntoConstraints = false
datePicker.autoresizingMask = .flexibleWidth
if #available(iOS 13, *) {
datePicker.backgroundColor = .label
} else {
datePicker.backgroundColor = .white
}
datePicker.datePickerMode = .date
datePicker.addTarget(self, action: #selector(self.dateChanged), for: .valueChanged)
return datePicker
}()
private lazy var toolBar : UIToolbar = {
let toolBar = UIToolbar()
toolBar.translatesAutoresizingMaskIntoConstraints = false
toolBar.barStyle = .default
toolBar.items = [UIBarButtonItem.init(barButtonSystemItem: .flexibleSpace, target: nil, action: nil), UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.onDoneClicked))]
toolBar.sizeToFit()
return toolBar
}()
@objc private func onDoneClicked(picker : UIDatePicker) {
}
@objc private func dateChanged(picker : UIDatePicker) {
}
private func addDatePicker() {
self.view.addSubview(self.datePicker)
self.view.addSubview(self.toolBar)
NSLayoutConstraint.activate([
self.datePicker.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
self.datePicker.leftAnchor.constraint(equalTo: self.view.leftAnchor),
self.datePicker.rightAnchor.constraint(equalTo: self.view.rightAnchor),
self.datePicker.heightAnchor.constraint(equalToConstant: 300)
])
NSLayoutConstraint.activate([
self.toolBar.bottomAnchor.constraint(equalTo: self.datePicker.topAnchor),
self.toolBar.leftAnchor.constraint(equalTo: self.view.leftAnchor),
self.toolBar.rightAnchor.constraint(equalTo: self.view.rightAnchor),
self.toolBar.heightAnchor.constraint(equalToConstant: 50)
])
}
試試這個代碼,
-(IBAction)showDatePicker:(id)sender
{
UIDatePicker* picker = [[UIDatePicker alloc] init];
picker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
picker.datePickerMode = UIDatePickerModeDate;
[picker addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged];
CGSize pickerSize = [picker sizeThatFits:CGSizeZero];
picker.frame = CGRectMake(0.0, 250, pickerSize.width, 460);
picker.backgroundColor = [UIColor blackColor];
[self.view addSubview:picker];
[picker release];
}
-(void) dueDateChanged:(UIDatePicker *)sender {
NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
//self.myLabel.text = [dateFormatter stringFromDate:[dueDatePickerView date]];
NSLog(@"Picked the date %@", [dateFormatter stringFromDate:[sender date]]);
}
您尚未在代碼中的任何位置將datePicker
添加到您的視圖中。 像這樣嘗試
datepicker=[[UIDatePicker alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height - 216, self.view.frame.size.width, 216)];
datepicker.datePickerMode=UIDatePickerModeDate;
[self.view addSubview:picker]; // adding picker to your view
此外,您還沒有在視圖中添加toolbar
。 所以,這樣做
[self.view addSubview:toolbar];
希望能幫助到你..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.