Ios 如何添加其他用户建议的这段代码?

Ios 如何添加其他用户建议的这段代码?,ios,swift,Ios,Swift,以下是我的原始代码: import UIKit class CalculatorViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { @IBOutlet weak var firstButton: UIButton! @IBOutlet weak var secondButton: UIButton! @IBOutlet weak var thirdButton: UI

以下是我的原始代码:

        import UIKit

class CalculatorViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

@IBOutlet weak var firstButton: UIButton!
@IBOutlet weak var secondButton: UIButton!
@IBOutlet weak var thirdButton: UIButton!
@IBOutlet weak var fourthButton: UIButton!
@IBOutlet weak var fifthButton: UIButton!
@IBOutlet weak var nextPageButton: UIButton!

@IBOutlet weak var firstTextField: UITextField!
@IBOutlet weak var secondTextField: UITextField!
@IBOutlet weak var thirdTextField: UITextField!
@IBOutlet weak var fourthTextField: UITextField!
@IBOutlet weak var fifthTextField: UITextField!

@IBOutlet weak var pickerView: UIPickerView!

var firstButtonDataSource = ["1", "2", "3", "4"];
var secondButtonDataSource = ["White", "Red", "Green", "Blue"];
var thirdButtonDataSource = ["Mike", "Steve", "Ben", "Peter"];
var fourthButtonDataSource = ["Large", "Medium", "Small", "Extra-small"];
var fithButtonDataSource = ["USA", "UK", "France", "Germany"];

var lastPressedButton: UIButton?

override func viewDidLoad() {
    super.viewDidLoad()

    firstButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    secondButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    thirdButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    fourthButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    fifthButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)

    self.pickerView.dataSource = self;
    self.pickerView.delegate = self;
}

@objc func buttonClicked(sender:UIButton!) {

    lastPressedButton = sender

    if lastPressedButton == firstButton {
        firstTextField.inputView = pickerView
    } else if lastPressedButton == secondButton {
        secondTextField.inputView = pickerView
    } else if lastPressedButton == thirdButton {
        thirdTextField.inputView = pickerView
    } else if lastPressedButton == fourthButton {
        fourthTextField.inputView = pickerView
    } else if lastPressedButton == fifthButton {
        fifthTextField.inputView = pickerView
    }
}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

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

    if lastPressedButton == firstButton {
        return firstButtonDataSource.count;
    } else if lastPressedButton == secondButton {
        return secondButtonDataSource.count;
    } else if lastPressedButton == thirdButton {
        return thirdButtonDataSource.count;
    } else if lastPressedButton == fourthButton {
        return fourthButtonDataSource.count;
    } else if lastPressedButton == fifthButton {
        return fithButtonDataSource.count;
    }

    return 0
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    if lastPressedButton == firstButton {
        return firstButtonDataSource[row];
    } else if lastPressedButton == secondButton {
        return secondButtonDataSource[row];
    } else if lastPressedButton == thirdButton {
        return thirdButtonDataSource[row];
    } else if lastPressedButton == fourthButton {
        return fourthButtonDataSource[row];
    } else if lastPressedButton == fifthButton {
        return fithButtonDataSource[row];
    }

    return ""
}

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

    if lastPressedButton == firstButton {
        self.firstTextField.text = firstButtonDataSource[row]
    } else if lastPressedButton == secondButton {
        self.secondTextField.text = secondButtonDataSource[row]
    } else if lastPressedButton == thirdButton {
        self.thirdTextField.text = thirdButtonDataSource[row]
    } else if lastPressedButton == fourthButton {
        self.fourthTextField.text = fourthButtonDataSource[row]
    } else if lastPressedButton == fifthButton {
        self.fifthTextField.text = fithButtonDataSource[row]
    }
}
}
下面是我被告知要做的:

" 看起来您从未将正确的文本字段设置为第一响应者

顺便说一句,所有长if/else if/else if…构造都会像switch语句一样更简洁,或者您甚至可以设置字典,将按钮作为键,然后是包含数据源和该按钮的选择器视图的结构:

然后他说:“然后像你的按钮操作这样的代码可以使用字典:”


所以我的问题是如何将这两组新代码添加到我的原始代码中并进行更新?我尝试过许多方法和地方,但我在代码方面没有足够的经验,无法在我的项目中不把事情搞砸

这张图片会很有帮助。此
红色标记
用于
UIPickerViewDelegate

创建名为
buttonda
的空
Swift
文件并复制此代码

ViewController
中,您可以这样尝试

@IBOutlet weak var firstButton: UIButton!
@IBOutlet weak var secondButton: UIButton!
@IBOutlet weak var thirdButton: UIButton!
@IBOutlet weak var fourthButton: UIButton!
@IBOutlet weak var fifthButton: UIButton!

@IBOutlet weak var firstTextField: UITextField!
@IBOutlet weak var secondTextField: UITextField!
@IBOutlet weak var thirdTextField: UITextField!
@IBOutlet weak var fourthTextField: UITextField!
@IBOutlet weak var fifthTextField: UITextField!


var buttonsDict = [UIButton : ButtonData]()
var lastPressedButton: UIButton?
@IBOutlet weak var pickerView: UIPickerView!


override func viewDidLoad() {
    super.viewDidLoad()

    buttonsDict = [
        firstButton: ButtonData(buttonDataSource: ["1", "2", "3", "4"],
                                buttonTextField: firstTextField),
        secondButton: ButtonData(buttonDataSource: ["White", "Red", "Green", "Blue"],
                                 buttonTextField: secondTextField),
        thirdButton: ButtonData(buttonDataSource: ["Mike", "Steve", "Ben", "Peter"],
                                buttonTextField: thirdTextField),
        fourthButton: ButtonData(buttonDataSource: ["Large", "Medium", "Small", "Extra-small"],
                                 buttonTextField: fourthTextField),
        fifthButton: ButtonData(buttonDataSource: ["USA", "UK", "France", "Germany"],
                                buttonTextField: fifthTextField)
    ]

    firstButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    secondButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    thirdButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    fourthButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    fifthButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)

    self.pickerView.dataSource = self;
    self.pickerView.delegate = self;

    // Do any additional setup after loading the view.
}

@objc func buttonClicked(sender:UIButton!) {

    lastPressedButton = sender

    guard let buttonStruct = buttonsDict[lastPressedButton!] else { return }

    let textField = buttonStruct.buttonTextField

    textField.inputView = pickerView

    //I think this the code you need to show the picker
    textField.becomeFirstResponder() 
}


// STRUCT
import Foundation
import UIKit

struct ButtonData {
    let buttonDataSource: [String]
    let buttonTextField: UITextField
}

在ur中为Structlet buttonsDict=[…,…,…,,…,]单独设置类文件viewcontroller@objcfunc Button点击,用他的逻辑替换你的逻辑。你能在操场上把它加在一起吗?idk谁否决了你我没有足够的因果报应,但我猜他们认为这是错误的,对不起,我听不懂你的说明,代码的图像没有帮助。请将此图像替换为实际代码,如文本。
    @objc func buttonClicked(sender:UIButton!) {

lastPressedButton = sender

guard let buttonStruct = buttonsDict[lastPressedButton] else { return }

let textField = buttonsStruct.buttonTextField

textField.inputView = pickerView

//I think this the code you need to show the picker
textField.becomeFirstResponder() 
}
@IBOutlet weak var firstButton: UIButton!
@IBOutlet weak var secondButton: UIButton!
@IBOutlet weak var thirdButton: UIButton!
@IBOutlet weak var fourthButton: UIButton!
@IBOutlet weak var fifthButton: UIButton!

@IBOutlet weak var firstTextField: UITextField!
@IBOutlet weak var secondTextField: UITextField!
@IBOutlet weak var thirdTextField: UITextField!
@IBOutlet weak var fourthTextField: UITextField!
@IBOutlet weak var fifthTextField: UITextField!


var buttonsDict = [UIButton : ButtonData]()
var lastPressedButton: UIButton?
@IBOutlet weak var pickerView: UIPickerView!


override func viewDidLoad() {
    super.viewDidLoad()

    buttonsDict = [
        firstButton: ButtonData(buttonDataSource: ["1", "2", "3", "4"],
                                buttonTextField: firstTextField),
        secondButton: ButtonData(buttonDataSource: ["White", "Red", "Green", "Blue"],
                                 buttonTextField: secondTextField),
        thirdButton: ButtonData(buttonDataSource: ["Mike", "Steve", "Ben", "Peter"],
                                buttonTextField: thirdTextField),
        fourthButton: ButtonData(buttonDataSource: ["Large", "Medium", "Small", "Extra-small"],
                                 buttonTextField: fourthTextField),
        fifthButton: ButtonData(buttonDataSource: ["USA", "UK", "France", "Germany"],
                                buttonTextField: fifthTextField)
    ]

    firstButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    secondButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    thirdButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    fourthButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)
    fifthButton.addTarget(self, action:#selector(buttonClicked(sender:)), for: .touchUpInside)

    self.pickerView.dataSource = self;
    self.pickerView.delegate = self;

    // Do any additional setup after loading the view.
}

@objc func buttonClicked(sender:UIButton!) {

    lastPressedButton = sender

    guard let buttonStruct = buttonsDict[lastPressedButton!] else { return }

    let textField = buttonStruct.buttonTextField

    textField.inputView = pickerView

    //I think this the code you need to show the picker
    textField.becomeFirstResponder() 
}


// STRUCT
import Foundation
import UIKit

struct ButtonData {
    let buttonDataSource: [String]
    let buttonTextField: UITextField
}