web-dev-qa-db-ja.com

ボタンを押した後、アプリの下部からUIPickerViewを上昇させるにはどうすればよいですか?

私はiPhoneアプリを作ることでSwiftを学んでいます。私が直面している問題は、UIPickerViewの実装に関係しています。押された場合にUIPickerViewを下から上昇させるボタンがあります。画面をメインビュー上で設定された長さにします。次に、ユーザーがUIPickerViewからアイテムを選択すると、UIPickerViewは、再度呼び出されるまでメインビューから下降します。

私が複製しようとしていることの良い例は、時計アプリにアラームを追加するときです。ビューがすべてを覆い隠しておらず、ラベルもスイッチもありません。

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!");

}

前もって感謝します!

10
Afrocious

OK、UITextFieldを使用してこれを行うことができます

ステップ01:-

UITextFieldを追加します。ボードスタイルを非表示に選択し、色合いを白/クリアカラーに設定します。 enter image description here

enter image description here

ステップ02:-

次に、UITextFieldの上部にUIButtonを追加し、同じ幅の高さと制約を追加します。これがストロイボードの階層です。

enter image description here

ステップ03:-

次に、BUTTONとTextFieldをこのクラス関数に接続します:-

ボタンをこの@IBActionfunc button(sender: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 2", "val 3", "val 4"]
var myPicker: UIPickerView! = UIPickerView()

override func viewDidLoad() {
    super.viewDidLoad()
    self.myPicker = UIPickerView(frame: CGRectMake(0, 40, 0, 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, 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, 0, 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)), 0, 100, 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が送信したイベントが「EditDidBegin」であることを確認してくださいこのように:-

enter image description here

これがお役に立てば幸いです...

7
  • フレームをCGRectZeroとしてUIPickerViewを作成します
  • UITextFieldを作成します。
  • TextFieldをhiddenに設定します。
  • UIButtonを作成します。
  • ボタンをクリックしたら、textField.becomeFirstResponder()を呼び出します

それでおしまい!

5
Rohan Sanap