Nic*_*k89 6 uibutton uitextfield ios is-empty swift
所以我的概念很简单,我有一个文本字段和一个标有"下一步"的按钮.如果用户没有在文本字段中放置任何内容,我希望将"下一步"按钮禁用给用户.为此,我运行了以下代码:
 @IBAction func nextButton(sender: UIButton) {
    if textField.text.isEmpty {
        buttonLabel.userInteractionEnabled = false
    }
 }
这会根据需要禁用按钮,但问题是,如果文本然后在文本字段中输入,则按钮仍处于禁用状态.我已经尝试在"if"语句之后添加"else"语句来反转我所说的是否有效,但事实并非如此.
任何帮助非常感谢.
缺口
我的代码:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate {
func imageEffect() {
    // Set vertical effect for background
    var verticalMotionEffect : UIInterpolatingMotionEffect =
    UIInterpolatingMotionEffect(keyPath: "center.y",
        type: .TiltAlongVerticalAxis)
    verticalMotionEffect.minimumRelativeValue = -20
    verticalMotionEffect.maximumRelativeValue = 20
    // Set horizontal effect for background
    var horizontalMotionEffect : UIInterpolatingMotionEffect =
    UIInterpolatingMotionEffect(keyPath: "center.x",
        type: .TiltAlongHorizontalAxis)
    horizontalMotionEffect.minimumRelativeValue = -20
    horizontalMotionEffect.maximumRelativeValue = 20
    // Create group for background to combine both
    var group : UIMotionEffectGroup = UIMotionEffectGroup()
    group.motionEffects = [horizontalMotionEffect, verticalMotionEffect]
    // Add both effects to your view for background
    myBackgroundView.addMotionEffect(group)
}
var datePickerView:UIDatePicker = UIDatePicker()
@IBAction func textFieldEdited(sender: UITextField) {
    var datePickerView  : UIDatePicker = UIDatePicker()
    datePickerView.datePickerMode = UIDatePickerMode.Date
    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
    }
func handleDatePicker(sender: UIDatePicker) {
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd MMMM yyyy"
    questionTextField.text = dateFormatter.stringFromDate(sender.date)
}
var countryData = ["United Kingdom", "France", "Spain", "Germany", "Berlin", "Eygpt", "United States"]
var pickerView:UIPickerView = UIPickerView()
@IBOutlet var progressStatus: UIProgressView!
@IBOutlet var barImage: UIImageView!
@IBOutlet var questionLabel: UILabel!
@IBOutlet var buttonBarImage: UIImageView!
@IBOutlet var buttonLabel: UIButton!
@IBOutlet var myBackgroundView: UIImageView!
@IBOutlet var questionTextField: UITextField!
let questions = ["Where are you going?", "What are you doing there?", "When do you go?"]
var currentQuestionIndex = 0
let placeholder = ["Country", "Activity", "Date"]
var currentPlaceholderIndex = 0
@IBAction func nextButton(sender: AnyObject) {
    if currentQuestionIndex == 0 {
        progressStatus.setProgress(0.333, animated: true)
    } else if currentQuestionIndex == 1 {
        progressStatus.setProgress(0.666, animated: true)
    } else {
        progressStatus.setProgress(1, animated: true)
    }
    // Initial setup on button press
    questionTextField.hidden = false
    barImage.hidden = false
    questionTextField.placeholder = placeholder[currentPlaceholderIndex]
    questionLabel.text = questions[currentQuestionIndex]
    questionTextField.resignFirstResponder()
    // Reset text field to have no text
    questionTextField.text = ""
    // Displays the questions in array and displays the placeholder text in the textfield
    if currentQuestionIndex <= questions.count && currentPlaceholderIndex <= placeholder.count {
        currentQuestionIndex++
        currentPlaceholderIndex++
        //progressStatus.setProgress(0.333, animated: true)
        buttonLabel.setTitle("Next", forState: UIControlState.Normal)
        // Animate text for questionLabel
        UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.5, options: nil, animations: {
            self.questionLabel.center = CGPoint(x: -110 , y: 305 + 20)
            }, completion: nil)
    } else {
        //Add some logic here to run whenever the user has answered all the questions.
    }
}
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    questionTextField.delegate = self
    pickerView.delegate = self
    pickerView.dataSource = self
    // Applies the image effect to the image in myBackgroundImage
    imageEffect()
    // Sets the button text
    buttonLabel.setTitle("Get started", forState: UIControlState.Normal)
    // Sets the question text to be blank
    questionLabel.text = ""
    // Sets placeholder text in the text field
    questionTextField.placeholder = ""
    // Hides the text field
    questionTextField.hidden = true
    // Hides the image background for the text field
    barImage.hidden = true
    // Sets the progress bar to nil
    progressStatus.setProgress(0, animated: true)
    if questionTextField.text.isEmpty {
        buttonLabel.userInteractionEnabled = false
    }
}
func textFieldDidBeginEditing(textField: UITextField) {
    buttonLabel.userInteractionEnabled = true
    switch currentQuestionIndex {
    case 0:
        // TODO: Add UIPickerView
        self.view.addSubview(datePickerView)
    case 2:
        // TODO: Add UIDatePicker
        self.view.addSubview(datePickerView)
    default:
        println("default")
    }
}
// resigns the keyboard when user presses the return/next key on keyboard
func textFieldShouldReturn(textField: UITextField) -> Bool {
    questionTextField.resignFirstResponder()
    return true
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return countryData.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return countryData[row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    questionTextField.text = countryData[row]
    pickerView.hidden = true
}
// Resigns the keyboard if the user presses anywhere on the screen
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    self.view.endEditing(true)
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}
编辑:
设置myButton.userInteractionEnabled = false在viewDidLoad或 中viewWillAppear。
设置你textField的delegate。
进而
func textFieldDidBeginEditing(textField: UITextField) {
   if !textField.text.isEmpty
       myButton.enable = true
   } else {
       buttonLabel.enable = false
   }
}
| 归档时间: | 
 | 
| 查看次数: | 9005 次 | 
| 最近记录: |