我是Swift的新手,请多多包涵。

首先,让我解释一下我的应用布局:

我在屏幕上有一个文本字段,带有标签和按钮。 我问用户3个问题-这些问题使用“标签”显示,每当用户按下“下一个”按钮时,下一个问题就会出现(这些问题是从数组中填充的)。

问题之一是填充“选择器视图”(以便用户可以选择一个选项)。 问题之一是使用普通键盘。 最后一个问题是我需要使用日期选择器。

这可能吗? 如果是这样,请您告诉我如何将其添加到下面的代码中?

let questions = ["What is your title?", "What is your full name?", "When were you born?"]

var currentQuestionIndex = 0

let placeholder = ["Title", "Full name", "Date of birth"]

var currentPlaceholderIndex = 0

@IBAction func nextButton(sender: AnyObject) {

    textField.hidden = false
    textField.placeholder = placeholder[currentPlaceholderIndex]
    barImage.hidden = false

    // Reset text field to have no text
    textField.text = ""


    questionLabel.text = questions[currentQuestionIndex]

    // Displays the questions in array
    if currentQuestionIndex < questions.count {
        ++currentQuestionIndex

        // Displays the placeholder text in the textfield
        if currentPlaceholderIndex < placeholder.count {
            ++currentPlaceholderIndex

        }

        buttonLabel.setTitle("Next", forState: UIControlState.Normal)


    }

    else {

       //Add some logic here to run whenever the user has answered all the questions.

    }

  }

谢谢你的帮助!

缺口

下面的新代码(自2015年4月6日起):

ViewController类:UIViewController,UITextFieldDelegate,UIPickerViewDataSource,UIPickerViewDelegate {

var pickerData = ["Mr", "Mrs", "Miss", "Ms", "Doctor"]

var questions = ["What is your title?", "What is your name?", "What is your DOB?"]

var currentQuestionIndex = 0

var datePickerView:UIDatePicker = UIDatePicker()
var pickerView:UIPickerView = UIPickerView()

@IBOutlet var buttonLabel: UIButton!

@IBOutlet var questionsLabel: UILabel!

@IBOutlet var textField: UITextField!

@IBAction func textFieldEditing(sender: UITextField) {

    datePickerView.datePickerMode = UIDatePickerMode.Date
    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
}

func datePickerValueChanged(sender: UIDatePicker) {
    var dateformatter = NSDateFormatter()
    dateformatter.dateStyle = NSDateFormatterStyle.LongStyle
    textField.text = dateformatter.stringFromDate(sender.date)
}

@IBAction func nextButton(sender: UIButton) {

    textField.text = ""
    textField.hidden = false
    buttonLabel.setTitle("Next", forState: UIControlState.Normal)
    questionsLabel.text = questions[currentQuestionIndex]

    if currentQuestionIndex < questions.count {

        currentQuestionIndex++ 
    }

    else {
        //println("questions are complete")
    }
}

func textFieldDidBeginEditing(textField: UITextField) {

    switch currentQuestionIndex {

    case 0:
        self.view.addSubview(datePickerView)

    case 2:
        self.view.addSubview(pickerView)
    default:
        println("Test")
    }
}


override func viewDidLoad() {
    super.viewDidLoad()
    buttonLabel.setTitle("Start", forState: UIControlState.Normal)
    textField.hidden = true
    questionsLabel.text = ""
    textField.delegate = self
    pickerView.delegate = self
    pickerView.dataSource = self


    // Do any additional setup after loading the view, typically from a nib.
}

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

func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.view.endEditing(true)

}


func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {

return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

return pickerData.count

}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return pickerData[row]

}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

textField.text = pickerData[row]
pickerView.hidden = true

}

}

#1楼 票数:0

根据currentQuestionIndex您可以将UIPickerViewUIDatePicker添加到UITextField实例中

switch currentQuestionIndex {
case 0: 
  // TODO: Add UIPickerView
case 2:
  // TODO: Add UIDatePicker
}

编辑:更多说明

首先,遵循UITextFieldDelegate并实现textFieldDidBeginEditing(:) ,因为您想在UITextField实例获得第一个响应者状态时获得通知,所以必须实现该方法。

另外,将UITextField实例的delegate属性设置为self或要放置的任何实例/对象,并实现textFieldDidBeginEditing(:)

然后写这段代码

func textFieldDidBeginEditing(_ textField: UITextField) {
  switch currentQuestionIndex {
    case 0: 
      // TODO: Add UIPickerView
      // Add it for example at the bottom your view self.view.addSubview(pickerViewInstance)
      // or add it as the subview of UIPopoverController instance that is added to your UITextField instance 
    case 2:
      // TODO: Add UIDatePicker
      // Add it for example at the bottom your view self.view.addSubview(datePickerInstance)
      // or add it as the subview of UIPopoverController instance that is added to your UITextField instance 
  }
}

当您想向UIPopoverViewController添加另一个视图时,请记住删除添加的视图。

编辑:添加实际的实现

class NewCaseViewController : UIViewController {
    . . .

    @IBOutlet weak var textField: UITextField // TODO: Initialize it properly in designated initializer
    var popoverController: UIPopoverController! // TODO: Initialize it

    . . .
}


class PopoverContentManager : UIViewController {
    . . .

    var pickerView: UIPickerView // TODO: Initialize it properly
    var datePicker: UIDatePicker // TODO: Initialize it properly

    . . .
}

extension NewCaseViewController : UITextFieldDelegate {
    func textFieldBeginEditing(_ textField: UITextField) {
        println(__FUNCTION__)

        var popover = PopoverContentManager()

        switch self.currentQuestionIndex {
            case 0:
                popover.datePicker.hidden = true

                self.popoverController = init(contentViewController: popOver)

                self.popoverController.presentPopoverFromRect(self.textField.bounds, inView: self.textField, permittedArrowDirections: UIPopoverArrowDirectionDown, animated: true)

                self.popoverController.popoverContentSize = CGSizeMake(120, 90)
            case 1:
                popover.pickerView.hidden = true

                self.popoverController = init(contentViewController: popOver)

                self.popoverController.presentPopoverFromRect(self.textField.bounds, inView: self.textField, permittedArrowDirections: UIPopoverArrowDirectionDown, animated: true)

                self.popoverController.popoverContentSize = CGSizeMake(120, 90)
            }
        }
}

  ask by Nick89 translate from so

未解决问题?本站智能推荐:

1回复

如何在同一个Viewcontroller上使用UIPickerview和UIDatePicker?

我在 Viewcontroller 中有三个 TextFields。 单击第一个后,我想使用 UIPickerview 来选择某些内容。 第二个 TF 应该打开键盘,第三个 TF 应该打开 UIDatepicker。 我可以开始模拟并且 UIPickerview 工作。 也是键盘上第二个文本字段的输
1回复

使用UIButton实现UIDatePicker和UIPickerView

我正在使用UIPickerView和UIDatePicker作为用户输入设备的iOS应用程序中实现用户表单。 我已经将这些实现为场景中主UIViewController外部的视图,并通过添加和删除约束使用自动autolayout来显示和隐藏它们。 这是我的问题:我维护着单独的约束和隐藏/显
1回复

如何使UIBarButtonItem文本在UIPickerView中可见?

是否有人面临UIToolbar中的UIBarButtonItem文本(在UIDatePicker中调用)不可见的问题,直到您单击此UIBarButtonItem为止? 是什么导致此问题? 在这里看不到按钮 但是,当您在应该显示的屏幕上单击时,您会看到它出现 我尝试了一切,但问题仍然
1回复

如何在Swift中创建仅一年的PickerView[重复]

这个问题已经在这里有了答案: UIDatePicker仅显示 5个答案 第一次在这里发布,所以希望我做对了。 我正在尝试创建一个选择器或日期选择器,仅允许我显示从1900年到今年(2015年)的年份。 所以它看起来应该像这样: “建造了一年的房子: 1900年至20
1回复

有没有办法阻止UIDatePicker滚动/旋转?

所以我想复制在日历应用中选择一个日期,我创建一个视图,如果用户点击日期标签,则显示/隐藏,但是如果用户点击日期标签和flics Picker,然后点击标签将其隐藏,您仍然可以听到并隐藏感觉选择器滚动/旋转。 我已经单独尝试过并结合: 我认为可以通过删除UIDatePicker并将其再次添
2回复

如何创建和子类化只显示日期的自定义UIPickerView迅速?

快速地,如何通过子类UPickerView创建自定义选择器视图,使其仅显示日期选择器? 找不到答案。 任何帮助都将受到赞赏。
2回复

在UIPickerView和UIDatePicker中为Swift选择第一行或带有完成按钮的任何行

我有一个带有4个UITextFields的ViewController。 前三个由自己的UIPickerView填充,第四个由UIDatePicker填充。 我希望完成按钮能够选择每个选择器的第一行,或者选择不是第一行的任何行。 以下是适用于第一个UIPicker的代码。 从选择UI
1回复

没有自定义UIPickerView的UIDatePicker中的“未知”年份[重复]

这个问题已经在这里有了答案: 有什么方法可以删除日期选择器的“年份”? 5个答案 我担心这个问题已经被提出并被击落了很多次,但是值得一试... 是否可以使用创建与联系人应用程序中的生日选择器完全相同的UIDatePicker,并为年份组件选择“ ----”,而无需使用UI