我正在通过制作iPhone应用程序来学习
Swift.我遇到的问题涉及实现UIPickerView.我有一个按钮,如果按下该按钮,应该使UIPickerView从屏幕底部上升到主视图上的设定长度.然后,当用户从UIPickerView中选择一个项目时,UIPickerView会从主视图中下降,直到再次调用它为止.
我正在尝试复制的一个很好的例子就是当你在Clock应用程序中添加一个警报时,没有视图覆盖所有内容而没有标签和没有开关.
我也想让我从PickerView中选择的项目触发一个功能,但我认为这将是在我遇到这个障碍之后.
这是我到目前为止的相关代码.
@IBOutlet weak var pickerContainer: UIView! @IBOutlet weak var pickerView: UIPickerView! let picker_values = ["val 1","val 2","val 3","val 4"]; override func viewDidLoad() { super.viewDidLoad() } @IBAction func buttonPressed(sender: AnyObject) { print("pressing a die!"); }
提前致谢!
解决方法
好的,你可以通过使用UITextField来做到这一点
第01步: –
添加UITextField.选择您看不见的板样式并将色调设置为白色/透明色.
第02步: –
然后在UITextField的顶部添加一个UIButton,添加相同的宽度高度和约束.这是stroy board层次结构,
第03步: –
然后将BUTTON和TextField连接到此类函数: –
将按钮连接到这个@IBAction func按钮(发送方:AnyObject),并将UITextField连接到@IBAction func textField(sender:UITextField).
import UIKit class ViewController: UIViewController,UITextFieldDelegate,UIPickerViewDataSource,UIPickerViewDelegate { @IBOutlet weak var textFeild: UITextField! let picker_values = ["val 1","val 4"] var myPicker: UIPickerView! = UIPickerView() override func viewDidLoad() { super.viewDidLoad() self.myPicker = UIPickerView(frame: CGRectMake(0,40,0)) self.textFeild.delegate = self self.myPicker.delegate = self self.myPicker.dataSource = self // Do any additional setup after loading the view,typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //MARK: - Delegates and data sources func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 } func pickerView(pickerView: UIPickerView,numberOfRowsInComponent component: Int) -> Int { return picker_values.count } //MARK: Delegates func pickerView(pickerView: UIPickerView,titleForRow row: Int,forComponent component: Int) -> String? { return picker_values[row] } func pickerView(pickerView: UIPickerView,didSelectRow row: Int,inComponent component: Int) { //Your Function print("Hello") } @IBAction func button(sender: AnyObject) { self.textFeild.becomeFirstResponder() } func cancelPicker(sender:UIButton) { //Remove view when select cancel self.textFeild.resignFirstResponder() // To resign the inputView on clicking done. } @IBAction func textField(sender: UITextField) { //Create the view let tintColor: UIColor = UIColor(red: 101.0/255.0,green: 98.0/255.0,blue: 164.0/255.0,alpha: 1.0) let inputView = UIView(frame: CGRectMake(0,self.view.frame.width,240)) myPicker.tintColor = tintColor myPicker.center.x = inputView.center.x inputView.addSubview(myPicker) // add date picker to UIView let doneButton = UIButton(frame: CGRectMake(100/2,100,50)) doneButton.setTitle("Done",forState: UIControlState.Normal) doneButton.setTitle("Done",forState: UIControlState.Highlighted) doneButton.setTitleColor(tintColor,forState: UIControlState.Normal) doneButton.setTitleColor(tintColor,forState: UIControlState.Highlighted) inputView.addSubview(doneButton) // add Button to UIView doneButton.addTarget(self,action: "doneButton:",forControlEvents: UIControlEvents.TouchUpInside) // set button click event let cancelButton = UIButton(frame: CGRectMake((self.view.frame.size.width - 3*(100/2)),50)) cancelButton.setTitle("Cancel",forState: UIControlState.Normal) cancelButton.setTitle("Cancel",forState: UIControlState.Highlighted) cancelButton.setTitleColor(tintColor,forState: UIControlState.Normal) cancelButton.setTitleColor(tintColor,forState: UIControlState.Highlighted) inputView.addSubview(cancelButton) // add Button to UIView cancelButton.addTarget(self,action: "cancelPicker:",forControlEvents: UIControlEvents.TouchUpInside) // set button click event sender.inputView = inputView } }
顺便说一下,确保你UITextField发送的事件是“编辑开始”,如下所示: –
希望这会帮助你……