繁体   English   中英

使用UISegmentedControl更改UIPickerView标签

[英]Using a UISegmentedControl to change UIPickerView Labels

我尝试实现UISegmentedControl,以便使用switch语句来决定应填充UIPickerView的数组,但是这种用swift编写的方法无法正常工作。 是否有其他人之前探讨过这个问题,或者对这些功能如何协同工作有任何想法?

这是到目前为止的代码:

    import UIKit


class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    var rejuvenatedEnterprisesEmployees = [
        Employees(name: "Jeffrey Wells", employeeRoles: ["Accountant", "Designer"], departmentID: 0),
        Employees(name: "Victor Atkins", employeeRoles: ["Director of IT", "Sales Stategist"], departmentID: 0),
        Employees(name: "Kelli Hamilton", employeeRoles: ["Director of Sales"], departmentID: 0),
        Employees(name: "Adam Braun", employeeRoles: ["Sales Lead"], departmentID: 1),
        Employees(name: "Brian Cruz", employeeRoles: ["Designer"], departmentID: 1),
        Employees(name: "Kristen Floyd", employeeRoles: ["Developer"], departmentID: 1),
        Employees(name: "Lois Martinez", employeeRoles: ["Curator", "Blogger"], departmentID: 2),
        Employees(name: "Michael Lind", employeeRoles: ["Sales, Administrator"], departmentID: 2),
        Employees(name: "Eric Bay", employeeRoles: ["Database Admin"], departmentID: 2),
        Employees(name: "Brandon Young", employeeRoles: ["Artist"], departmentID: 2)
    ]
    var rejuvenatedEnterprisesVictorsEmployees = [
        Employees(name: "Victor Atkins", employeeRoles: ["Director of IT", "Sales Stategist"], departmentID: 0),
        Employees(name: "Adam Braun", employeeRoles: ["Sales Lead"], departmentID: 1),
        Employees(name: "Brian Cruz", employeeRoles: ["Designer"], departmentID: 1),
        Employees(name: "Kristen Floyd", employeeRoles: ["Developer"], departmentID: 1)
    ]
    var rejuvenatedEnterprisesKellisEmployees = [
        Employees(name: "Kelli Hamilton", employeeRoles: ["Director of Sales"], departmentID: 0),
        Employees(name: "Lois Martinez", employeeRoles: ["Curator", "Blogger"], departmentID: 2),
        Employees(name: "Michael Lind", employeeRoles: ["Sales, Administrator"], departmentID: 2),
        Employees(name: "Eric Bay", employeeRoles: ["Database Admin"], departmentID: 2),
        Employees(name: "Brandon Young", employeeRoles: ["Artist"], departmentID: 2)
    ]
    var squaredEnterprisesEmployees: [String] = ["Jeffrey Wells","Victor Atkins","Kelli Hamilton","Adam Braun","Brian Cruz","Kristen Floyd","Lois Martinez","Michael Lind","Eric Bay","Brandon Young"]

    //UIPicker Scroll component
    let kManagerScrollComponentCount: Int = 1
    let kManagerScrollComponent: Int = 0
    //UIPicker Scroll component

    var chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))

    @IBOutlet weak var employeeListing: UITextView!
    @IBOutlet weak var userTicketLocation: UILabel!
    @IBAction func addEmployee(sender: AnyObject) {


    }

    @IBOutlet weak var segmentedControl: UISegmentedControl!
    @IBAction func indexChanged(sender: UISegmentedControl) {
        switch segmentedControl.selectedSegmentIndex
        {
        case 0:
            func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) ->UIView {
                //var chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
                chosenManagerScrollView.backgroundColor = UIColor.clearColor()
                var jumperCables: [String] = []
                for var i = 0; i < rejuvenatedEnterprisesEmployees.count ; ++i {
                    jumperCables.append(rejuvenatedEnterprisesEmployees[i].name)
                }
                chosenManagerScrollView.text = jumperCables[row]
                return chosenManagerScrollView
            }
        case 1:
            func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) ->UIView {
                //var chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
                chosenManagerScrollView.backgroundColor = UIColor.greenColor()
                var jumperCablez: [String] = []
                for var i = 0; i < rejuvenatedEnterprisesVictorsEmployees.count ; ++i {
                    jumperCablez.append(rejuvenatedEnterprisesVictorsEmployees[i].name)
                }
                chosenManagerScrollView.text = jumperCablez[row]
                return chosenManagerScrollView
            }
        default:
            break; 
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return kManagerScrollComponentCount
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return rejuvenatedEnterprisesEmployees.count
    }


    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) ->UIView {

        switch segmentedControl.selectedSegmentIndex
        {
        case 0:
                let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
                chosenManagerScrollView.backgroundColor = UIColor.clearColor()
                var jumperCables: [String] = []
                for var i = 0; i < rejuvenatedEnterprisesEmployees.count ; ++i {
                    jumperCables.append(rejuvenatedEnterprisesEmployees[i].name)
                }
                chosenManagerScrollView.text = jumperCables[row]
                return chosenManagerScrollView
        case 1:
                let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
                chosenManagerScrollView.backgroundColor = UIColor.greenColor()
                var jumperCablez: [String] = []
                for var i = 0; i < rejuvenatedEnterprisesVictorsEmployees.count ; ++i {
                    jumperCablez.append(rejuvenatedEnterprisesVictorsEmployees[i].name)
                }
                chosenManagerScrollView.text = jumperCablez[row]
                return chosenManagerScrollView
        default:
            print("done")
            let chosenManagerScrollView: UILabel = UILabel(frame: CGRectMake(40,0,170,72))
            chosenManagerScrollView.backgroundColor = UIColor.clearColor()
            var jumperCables: [String] = []
            for var i = 0; i < rejuvenatedEnterprisesEmployees.count ; ++i {
                jumperCables.append(rejuvenatedEnterprisesEmployees[i].name)
            }
            chosenManagerScrollView.text = jumperCables[row]
            return chosenManagerScrollView

        }
    }



    func displayEmployeeGroup(chosenEmployee: String, fromComponent chosenComponent: String) {

        switch chosenEmployee {
            case chosenEmployee where chosenEmployee == "Jeffrey Wells":
                for employee in rejuvenatedEnterprisesEmployees {
                    print(employee)
                    employeeListing.text = "\(employee)\n"
            }
            case chosenEmployee where chosenEmployee == "Victor Atkins":
            break

            case chosenEmployee where chosenEmployee == "Kelli Hamilton":
            break

        default: print("done")
        }
        if chosenEmployee == "Jeffrey Wells" {
            for employee in rejuvenatedEnterprisesEmployees {
                print(employee)
                employeeListing.text = "\(employee)\n"
            }
        }
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let chosenEmployee: Int = pickerView.selectedRowInComponent(kManagerScrollComponent)
        displayEmployeeGroup(squaredEnterprisesEmployees[chosenEmployee], fromComponent: "the list of employees")
    }




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


}

您还不了解数据源/委托消息传递的工作方式。 这段代码无法完成您认为的操作:

case 0:
    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) ->UIView {

这不会神奇地使此函数成为数据源viewForRow方法。 它只是定义了一个局部功能 ,该功能存在并立即消失,毫无意义。 您必须像其他所有方法一样,在视图控制器的顶层实现viewForRow 必须基于所选的细分进行选择。 (实际上,我认为您已经设置好了。)分段控件,当其值更改时,仅告诉选择器视图重新加载(例如reloadAllComponents ),从而导致再次调用viewForRow

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM