sak*_*sut 4 uidatepicker uitoolbar uibarbuttonitem ios swift
我以编程方式在工具栏中的UIDatePicker上设置完成并取消按钮.但是,我无法检测完成和取消按钮的单击操作.我找不到问题的原因.这是我的代码:
@IBAction func btnDueDate_Click(sender: UIButton)
{
var toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.Default
toolBar.translucent = true
toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
toolBar.sizeToFit()
var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("Done_Click"))
var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
var cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("Cancel_Click"))
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
self.datePicker.addSubview(toolBar)
self.datePicker.hidden = false
}
func Done_Click()
{
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
self.btnDueDate.setTitle(dateFormatter.stringFromDate(self.datePicker.date), forState: UIControlState.Normal)
}
func Cancel_Click()
{
self.datePicker.hidden = true
}
Run Code Online (Sandbox Code Playgroud)
你能帮我解决一下我做错了什么吗?
谢谢您的回答
最好的祝福
解决了:谢谢你的帮助,我通过编辑下面的代码行解决了这个问题:
self.view.addSubview(toolBar)
Run Code Online (Sandbox Code Playgroud)
当我添加工具栏作为子视图self.view
,而不是作为子视图self.datePicker
,它工作正常.
您的代码无法正常工作的原因是因为UIToolbar
它与重叠UIDatePicker
并且选择器正在接收所有输入.
我建议你使用属性inputAccessoryView
和工具栏分配到这一点,但不幸的是,这是一个只读属性,同时UIButton
与UIDatePicker
许多人正在使用的解决方法是使用a UITextField
并将a 设置inputView
为a UIDatePicker
和inputAccessoryView
a UIToolbar
.我在下面做了一个小例子,你可以尝试一下.
//
// ViewController.swift
// DatePickerWithToolbar
//
// Created by Stefan Veis Pennerup on 10/06/15.
// Copyright (c) 2015 Kumuluzz. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tvDueDate: UITextField!
var datePicker = UIDatePicker()
override func viewDidLoad() {
setupDatePicker()
}
func setupDatePicker() {
// Sets up the "button"
tvDueDate.text = "Pick a due date"
tvDueDate.textAlignment = .Center
// Removes the indicator of the UITextField
tvDueDate.tintColor = UIColor.clearColor()
// Specifies intput type
datePicker.datePickerMode = .Date
// Creates the toolbar
let toolBar = UIToolbar()
toolBar.barStyle = .Default
toolBar.translucent = true
toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
toolBar.sizeToFit()
// Adds the buttons
var doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: "doneClick")
var spaceButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
var cancelButton = UIBarButtonItem(title: "Cancel", style: .Plain, target: self, action: "cancelClick")
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
// Adds the toolbar to the view
tvDueDate.inputView = datePicker
tvDueDate.inputAccessoryView = toolBar
}
func doneClick() {
var dateFormatter = NSDateFormatter()
//dateFormatter.dateFormat = "dd-MM-yyyy"
dateFormatter.dateStyle = .ShortStyle
tvDueDate.text = dateFormatter.stringFromDate(datePicker.date)
tvDueDate.resignFirstResponder()
}
func cancelClick() {
tvDueDate.resignFirstResponder()
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6881 次 |
最近记录: |