gpt4 book ai didi

swift - 多个 UIPickerview 错误

转载 作者:行者123 更新时间:2023-11-30 13:53:27 24 4
gpt4 key购买 nike

我只是想让你知道我正在开发的 Xcode 版本是 7.1.1。言归正传,我有三个 Pickerview,如下图所示。主选取器 View 、左选取器 View 和右选取器 View 。

主pickerview的数组有一组名称,每个名称有一组单位,并且左右picker应该有相同的数据。我制作了一本字典,以便将这些单位组同步到它所属的位置,但我无法做到这一点。

我用 1 标记主选取器,用 2 标记左侧选取器,用 3 标记右侧选取器。此外,我将所有选取器与“dataSource”和“delegate”链接起来。

http://s12.postimg.org/fj72kg29p/main_View.png

<小时/>

主要目标是:

我希望当我从主选择器中选择一个名称(即“区域”)时,它的组必须显示或出现在左右选择器中,依此类推。

我已经完成了我所做的事情,但出现了以下错误:

http://s1.postimg.org/523f3smwf/Screen_Shot_2015_11_27_at_12_39_20_AM.png

这是我的代码:

import UIKit

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate {

@IBOutlet weak var mainPicker: UIPickerView!
@IBOutlet weak var leftPicker: UIPickerView!
@IBOutlet weak var rightPicker: UIPickerView!
@IBOutlet weak var textFieldLeft: UITextField!
@IBOutlet weak var textFielfRight: UITextField!
@IBOutlet weak var equal: UILabel!

//var mainPickerData = []
var leftPickerData = []
var rightPickerData = []

var dataDict:NSMutableDictionary!
var mainPickerData:NSArray!
var leftRightPickerData:NSArray!

//yourPicker.backgroundColor = UIColor(patternImage: UIImage(named: "back.jpg")!)


override func viewDidLoad() {
super.viewDidLoad()



// Connect data:
self.mainPicker.delegate = self
self.mainPicker.dataSource = self

self.leftPicker.delegate = self
self.leftPicker.dataSource = self

self.rightPicker.delegate = self
self.rightPicker.dataSource = self

let theWidth = view.frame.size.width
let theHeight = view.frame.size.height

mainPicker.center = CGPointMake(theWidth/2, theHeight/2 - 182.5)
leftPicker.center = CGPointMake(theWidth/2 - 100, theHeight/2)
rightPicker.center = CGPointMake(theWidth/2 + 100, theHeight/2)
textFieldLeft.center = CGPointMake(theWidth/2 - 90, theHeight/2 + 110)
textFielfRight.center = CGPointMake(theWidth/2 + 90, theHeight/2 + 110)
equal.center = CGPointMake(theWidth/2, theHeight/2 + 110)



let dataDict:NSMutableDictionary = ["Area":["Square Mile", "Square Yard", "Square Foot", "Square Inch", "Hectare", "Acre", "Square Kilometer", "Square Meter", "Square Centimeter", " Square Millimeter"]
,"Energy":["Btus", "Calories", "Ergs", "Foot-Pounds", "Joules", "Kilogram-Calories", "Kilogram-Meters", "Kilowatt-Hours", "Newton-Meters", "Watt-Hours"], "Length":["Mile", "Yard", "Foot", "Inch", "Kilometer", "Meter", "Centimeter", "Millimeter"], "Power": ["Btus/Minute", "Foot-Pounds/Min", "Foot-Pounds/Sec", "Horsepower", "Kilowatts", "Watts"], "Pressure": ["Pounds/Sqr Ft", "Pounds/Sqr In", "Atmospheres", "Bars", "In of Mercury", "Cm of Mercury", "Kilograms/Sqr Meter", "Pascals"], "Speed": ["Knots", "Miles/Hr", "Miles/Min", "Feet/Min", "Feet/Sec", "Kilometers/Hr", "Kilometer/Min", "Meters/Sec"], "Temperature": ["Celsius C˚", "Fahrenheit", "Kelvin"], "Time": ["Years", "Months", "Weeks", "Days", "Hours", "Minutes", "Seconds", "Millisconds", "Microseconds", " Nanoseconds"], "Volume": ["Cupic Feet","Cubic Meter", "Gallon (Imp)", "Gallon (US)", "Quart (US)", "Pint (US)", "Fluid Oz", "Cup", "Tablespoon", "Teaspoon", "Dram (US)", "Liter"], "Weight": ["Short Ton (US)","Long Ton (UK)", "Pound (U.S)", "Ounce (US)", "Stone", "Metric Ton", "Kilogram", "Gram"]]
mainPickerData = dataDict.allKeys;
leftRightPickerData = dataDict.objectForKey(mainPickerData.firstObject as! String) as! NSArray

// Linking the textFields with the pickerViews.
textFieldLeft.inputView = leftPicker;
textFielfRight.inputView = rightPicker;


}

// The number of columns of data
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}

// The number of rows of data
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

switch (pickerView.tag) {

case mainPicker.tag:

return mainPickerData.count

case leftPicker.tag,rightPicker.tag:

let currentSelectedIndex = mainPicker.selectedRowInComponent(0)
leftRightPickerData = (dataDict.objectForKey(mainPickerData[currentSelectedIndex] as! String) as! NSArray)

return leftRightPickerData.count;

default:
break;
}
return 0;
}

// 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? {

if leftPicker.tag == 1 {

return leftPickerData[row] as? String

}else {

return rightPickerData[row] as? String

}


}

// Catpure the picker view selection
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// This method is triggered whenever the user makes a change to the picker selection.
// The parameter named row and component represents what was selected.

if(pickerView.tag == 1 ){

let currentSelectedIndex = mainPicker.selectedRowInComponent(0)
leftRightPickerData = (dataDict.objectForKey(mainPickerData[currentSelectedIndex] as! String) as! NSArray)

leftPicker.reloadAllComponents();
rightPicker.reloadAllComponents();
}

}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

self.view.endEditing(true)

}

func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
let titleData = mainPickerData[row]
let myTitle = NSAttributedString(string: titleData as! String, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 15.0)!,NSForegroundColorAttributeName:UIColor.blueColor()])
return myTitle
}



}

最佳答案

也在您的 func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? 中正确处理所有选择器的属性文本,否则您的代码将崩溃。您只需定义 attributedTitle对于 mainPicker 。也为其他人执行此操作,如下所示。根据您的需要进行更改。

func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {

let titleData : String?
if(pickerView.tag == mainPicker.tag){
titleData = mainPickerData[row] as? String;

}
else{

let currentSelectedIndex = mainPicker.selectedRowInComponent(0)
leftRightPickerData = (dataDict.objectForKey(mainPickerData[currentSelectedIndex] as! String) as! NSArray)

titleData = leftRightPickerData[row] as? String;
}

let myTitle = NSAttributedString(string: titleData!, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 15.0)!,NSForegroundColorAttributeName:UIColor.blueColor()])
return myTitle;

}

关于swift - 多个 UIPickerview 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com