iOS选择器内部的iOS选择器



在这里有一个有趣的

我在 UITableViewCell内有一个 UIPickerView,这并不是要使用这种方式吗?

到目前为止,选择器在单击时向上滑动,但是选择器中没有数据,并且没有显示/取消按钮。

有人知道这是可能的还是知道这样做的更好方法?这是代码(只是试图暂时工作(

import Foundation
import UIKit
class HelloworkJobsEditJobViewController: UIViewController{
    fileprivate var presenter: HelloworkJobsEditJobPresenter?
    @IBOutlet weak var editJobTable: UITableView!
    @IBOutlet weak var blurView: UIView!

    func inject(presenter: HelloworkJobsEditJobPresenter) {
        self.presenter = presenter
    }
    var helloworkJob: HelloworkJob!
    let labelData = ["Title","Company",
                     "Location","Job Type",
                     "Min Salary","Max Salary",
                     "Posted Date"]
    let pickerData = ["Full Time", "Part Time", "Casual",
                      "Fixed term","Shiftworkers",
                      "Daily hire and weekly hire",
                      "Probation","Outworkers"]
    var myPicker: UIPickerView! = UIPickerView()
    var pickerTextField: UITextField?
    var picker: UIPickerView?
    let toolBar = UIToolbar()

    var textFieldData = [String]()
    override func viewDidLoad(){
        super.viewDidLoad()
        helloworkJob = presenter?.getHelloworkJob()
        editJobTable.dataSource = self
        editJobTable.delegate = self
        prepareTextFieldData()
        blurBackgroundButton()
        //setUpPickerView()
    }
    func setUpPickerView(){
        picker = UIPickerView(frame: CGRect(x: 0, y: 200, width: view.frame.width, height:300))
        picker!.backgroundColor = .white
        picker!.showsSelectionIndicator = true
        picker!.delegate = self
        picker!.dataSource = self
        toolBar.barStyle = UIBarStyle.default
        toolBar.isTranslucent = true
        toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
        toolBar.sizeToFit()
        let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: Selector("donePicker"))
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
        let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: Selector("donePicker"))
        toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
        toolBar.isUserInteractionEnabled = true
    }
    func setPickerTextField(pickerTextField:UITextField){
        setUpPickerView()
        pickerTextField.inputView = picker
        pickerTextField.inputAccessoryView = toolBar
    }

    func blurBackgroundButton(){
        if !UIAccessibilityIsReduceTransparencyEnabled() {
            blurView.backgroundColor = .clear
            let blurEffect = UIBlurEffect(style: .extraLight)
            let blurEffectView = UIVisualEffectView(effect: blurEffect)
            //always fill the view
            blurEffectView.frame = self.view.bounds
            blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            blurView.addSubview(blurEffectView) //if you have more UIViews, use an insertSubview API to place it where needed
        }
    }
    func prepareTextFieldData(){
        textFieldData.append(helloworkJob.jobTitle)
        textFieldData.append(helloworkJob.companyName)
        textFieldData.append(helloworkJob.jobLocation)
        textFieldData.append(helloworkJob.jobType)
        textFieldData.append(helloworkJob.minSalary)
        textFieldData.append(helloworkJob.maxSalary)
        textFieldData.append(helloworkJob.jobDatePosted)
    }
    @IBAction func tapCloseButton(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }
}
extension HelloworkJobsEditJobViewController: UITableViewDelegate {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        return 7
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//        print("click received")
//        if(indexPath.row == 3){
//            print("pass 3")
//            pickerTextField!.resignFirstResponder()
//        }
    }
}
extension HelloworkJobsEditJobViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        print("(#line): (#function) (indexPath.row)")

        if(indexPath.row == 3){
            let cellIdentifier = "CommonLabelPickerCell"
            guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? CommonLabelPickerCell else {
                fatalError("The dequeued cell is not an instance of (cellIdentifier).")
            }
            cell.cellLabel.text = labelData[indexPath.row]
            pickerTextField = cell.pickerTextField
            setPickerTextField(pickerTextField: pickerTextField!)
            return cell
        }else{
            let cellIdentifier = "CommonLabelTextFieldCell"
            guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? CommonLabelTextFieldCell else {
                fatalError("The dequeued cell is not an instance of (cellIdentifier).")
            }
            cell.cellLabel.text = labelData[indexPath.row]
            cell.cellTextField.text = textFieldData[indexPath.row]
            cell.selectionStyle = .none
            return cell
        }
    }
}
extension HelloworkJobsEditJobViewController: UIPickerViewDelegate{
}
extension HelloworkJobsEditJobViewController: UIPickerViewDataSource{
    // The number of columns of data
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    // The number of rows of data
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerData.count
    }
    // The data to return for the row and component (column) that's being passed in
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        // not being called
        print(pickerData)
        return pickerData[row]
    }
}

表单元

import Foundation
import UIKit
class CommonLabelPickerCell: UITableViewCell {
    @IBOutlet weak var cellLabel: UILabel!
    @IBOutlet weak var pickerTextField: UITextField!
    //MARK: Properties
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        // Configure the view for selected state
    }
}

建议使用iqdropdowntextfield库,该库支持使用Uipickerview的下拉列表。

请按照以下步骤设置并使用 IQDROPDORPDEAPTEXTFIELD

  1. 将POD添加到Project Podfile pod 'IQDropDownTextField'
  2. 通过在终端上执行pod install安装POD
  3. 在您的桥接标题中添加.H文件,并使用#import "IQDropDownTextField.h"
  4. 导入到HelloworkJobsEditJobViewController
  5. 设置文本字段 var pickerTextField: IQDropDownTextField!
  6. viewDidLoad()设置中

    pickerTextField.isOptionalDropDown = false pickerTextField.itemList = pickerData

欢呼!

最新更新