【问题标题】:multiple UIDatePicker one uitextfield多个UIDatePicker 一个uitextfield
【发布时间】:2015-10-12 09:27:13
【问题描述】:

在我的ViewController 中有几个UiTextfield

我打算使用一个UIDatePicker,预计会做出相应的响应。 我的代码只响应第二个文本字段生成的事件,而不是第一个。

我只需要确定是哪个UITextField 生成了事件...

import UIKit

class ViewController: UIViewController , UITextFieldDelegate {

var datePicker = UIDatePicker()

@IBOutlet weak var tvDueDate: UITextField!
@IBOutlet weak var tvOtherDate: UITextField!



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
     //setupDatePicker()
     self.tvDueDate.tag = 0
     self.tvOtherDate.tag = 1
     //setupDatePicker(textField)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func textFieldDidEndEditing(textField: UITextField) {
    setupDatePicker(textField)

}

func textFieldDidBeginEditing(textField: UITextField) {
    setupDatePicker(textField)

}




func setupDatePicker(text: UITextField) {
    // 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
    if text.tag == 0{
        self.tvDueDate.inputView = datePicker
        self.tvDueDate.inputAccessoryView = toolBar
    }
    else
    {
       self.tvOtherDate.inputView = datePicker
        self.tvOtherDate.inputAccessoryView = toolBar
    }

}

func doneClick() {
    var dateFormatter = NSDateFormatter()
    //dateFormatter.dateFormat = "dd-MM-yyyy"
    dateFormatter.dateStyle = .ShortStyle
    if tvDueDate.isFirstResponder(){
        tvDueDate.text = dateFormatter.stringFromDate(datePicker.date)
        tvDueDate.resignFirstResponder()
    }else{
      tvOtherDate.text = dateFormatter.stringFromDate(datePicker.date)
       tvOtherDate.resignFirstResponder()
    }
}

func cancelClick() {
    if tvDueDate.isFirstResponder(){
          tvDueDate.resignFirstResponder()
    }else{
         tvOtherDate.resignFirstResponder()
    }
}

}

【问题讨论】:

    标签: ios swift uitextfield uidatepicker


    【解决方案1】:

    为您的 UITextField 赋予唯一标签并使用 UITextField 代理。

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
         //setupDatePicker()
         self.tvDueDate.tag = 0
         self.tvOtherDate.tag = 1
    
     self.tvDueDate.delegate = self
     self.tvOtherDate.delegate = self
     //setupDatePicker(textField)
     }
    // UITextField Delegates
     func textFieldDidBeginEditing(textField: UITextField) {
     println("TextField did begin editing method called")
    
    if textField.tag == 0
    ..........
    if textField.tag == 2
    ....
     }
     func textFieldDidEndEditing(textField: UITextField) {
     println("TextField did end editing method called")
     }
     func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
     println("TextField should begin editing method called")
     return true;
     }
    

    【讨论】:

    • @Macrosoft-Dev ....感谢您的关注......我的委托方法似乎不起作用......也许我没有正确使用标签...... .你能给我一个参考吗...我什至已经编辑了我的代码并按照你的解释将其发布在上面
    • 在你的 viewdid 负载中你需要 your_txt_field.delegate = self
    • 答案已编辑,您也可以在 IB 中提供标签并连接 UITextField 代表。
    • @Macrosoft-Dev.......谢谢你的回复......在添加委托后它工作......
    • 欢迎@CloyMonis ..请接受,只要答案可以帮助您解决问题
    【解决方案2】:

    你在打电话

    setupDatePicker()
    

    来自 viewDidLoad,你的代码是

    if tvDueDate.isFirstResponder(){
            tvDueDate.inputView = datePicker
            tvDueDate.inputAccessoryView = toolBar
        }
        else
        {
            tvOtherDate.inputView = datePicker
            tvOtherDate.inputAccessoryView = toolBar
        }
    

    将选择器添加为 inputAccessoryView 。从 viewDidLoad 的角度来看,没有文本字段是 FirstResponder 这就是为什么只有你的 else 部分很兴奋并且它只添加到 tvOtherDate 字段中。 我建议从文本字段委托方法调用它(将开始编辑或开始编辑)或点击调用它。并且要检查它是从哪里调用的,还可以传递文本字段,或者您可以使用标签。

    【讨论】:

      【解决方案3】:

      向我的 UiTextField 添加代表和标签对我有帮助.......

      import UIKit
      
      class ViewController: UIViewController , UITextFieldDelegate {
      
      var datePicker = UIDatePicker()
      
      @IBOutlet weak var tvDueDate: UITextField!
      @IBOutlet weak var tvOtherDate: UITextField!
      
      override func viewDidLoad() {
          super.viewDidLoad()
          // Do any additional setup after loading the view, typically from a nib.
          //setupDatePicker()
          self.tvDueDate.tag = 0
          self.tvOtherDate.tag = 1
          //setupDatePicker(textField)
      
          self.tvDueDate.delegate = self
          self.tvOtherDate.delegate = self
      }
      
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          // Dispose of any resources that can be recreated.
      }
      
      func textFieldDidEndEditing(textField: UITextField) {
          setupDatePicker(textField)
      
      }
      
      func textFieldDidBeginEditing(textField: UITextField) {
          setupDatePicker(textField)
      
      }
      
      func setupDatePicker(text: UITextField) {
          // 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
          if text.tag == 0{
              self.tvDueDate.inputView = datePicker
              self.tvDueDate.inputAccessoryView = toolBar
          }
          else
          {
              self.tvOtherDate.inputView = datePicker
              self.tvOtherDate.inputAccessoryView = toolBar
          }
      
      }
      
      func doneClick() {
          var dateFormatter = NSDateFormatter()
          //dateFormatter.dateFormat = "dd-MM-yyyy"
          dateFormatter.dateStyle = .ShortStyle
          if tvDueDate.isFirstResponder(){
              tvDueDate.text = dateFormatter.stringFromDate(datePicker.date)
              tvDueDate.resignFirstResponder()
          }else{
              tvOtherDate.text = dateFormatter.stringFromDate(datePicker.date)
              tvOtherDate.resignFirstResponder()
          }
      }
      
      func cancelClick() {
          if tvDueDate.isFirstResponder(){
              tvDueDate.resignFirstResponder()
          }else{
              tvOtherDate.resignFirstResponder()
          }
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多