🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2719閲覧

pickerviewのdone,cancelボタンのエラー解消

ryosu

総合スコア5

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2019/12/12 08:48

##やりたいこと
pickerviewでdoneボタンとcancelボタンを追加したいのですが下記のエラーが出てしまい、困っています。

error

1Value of type '(Any) -> ()' has no member 'done' 2Value of type '(Any) -> ()' has no member 'cancel'

#該当部分

let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(addEvent.done)) let cancelItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(addEvent.cancel))

#コード全文

import UIKit import RealmSwift class addEvent: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { @IBOutlet weak var textField: UITextField! var pickerView: UIPickerView = UIPickerView() let list = ["", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] @IBOutlet weak var selectLabel: UILabel! @IBOutlet weak var eventTF: UITextField! @IBOutlet weak var datePicker: UIDatePicker! override func viewDidLoad() { super.viewDidLoad() pickerView.delegate = self pickerView.dataSource = self print(Realm.Configuration.defaultConfiguration.fileURL!) let toolbar = UIToolbar(frame: CGRectMake(0, 0, 0, 35)) let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(addEvent.done)) let cancelItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(addEvent.cancel)) self.textField.inputView = pickerView self.textField.inputAccessoryView = toolbar datePicker.datePickerMode = UIDatePicker.Mode.date datePicker.timeZone = NSTimeZone.local datePicker.locale = NSLocale(localeIdentifier: "ja_JP") as Locale datePicker.addTarget(self, action: #selector(picker(_:)), for: .valueChanged) view.addSubview(selectLabel) } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return list.count } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return list[row] } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { self.textField.text = list[row] } func cancel() { self.textField.text = "" self.textField.endEditing(true) } func done() { self.textField.endEditing(true) } func CGRectMake(_ x: CGFloat, _ y:CGFloat, _ width: CGFloat, _ height: CGFloat) ->CGRect { return CGRect(x: x, y: y, width: width, height: height) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) textField.becomeFirstResponder() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @objc func picker(_ sender:UIDatePicker){ let formatter = DateFormatter() formatter.dateFormat = "yyyy/MM/dd" selectLabel.text = formatter.string(from: sender.date) view.addSubview(selectLabel) } @IBAction func addEvent(_ sender: Any) { print("データ書き込み開始") let realm = try! Realm() try! realm.write { //日付表示の内容とスケジュール入力の内容が書き込まれる。 let Events = [Event(value: ["date": selectLabel.text, "event": eventTF.text])] realm.add(Events) print("データ書き込み中") } print("データ書き込み完了") //前のページに戻る dismiss(animated: true, completion: nil) self.navigationController?.popViewController(animated: true) } }

swift = 5
MACOS = 10.15.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おかしな点がいくつかあります。

UIBarButtonItem(doneItem, cancelItem)がtoolbarに追加されていない。
=画面に表示されない

あと、selectorで設定するfuncの先頭には@objcが必要になります。
Xcodeでエラーが出ると思いますが、、、それは無視したのでしょうか?
直し方や何が間違っているか示唆してくれるので、「読むこと」が大事です。

selectorと@objcは下記参照
https://swift-ios.keicode.com/ios/target-action.php

投稿2019/12/12 12:03

hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryosu

2019/12/13 03:54

回答ありがとうございます。 toolbarに関しては自分のミスで消していることに気が付きませんでした。 無視したのでしょうか?に関しては警告がでてfixで変更した際にエラーが消えたので大丈夫だと思っていました。 結局、エラーが出ている文のaddEventをselfに変えることによってエラーが消えました。しかし、@objcが抜けているとエラーになるので必要だと言うことが分かりました。 全く知識のない状態で分からなかったのでアドバイスをして頂き助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問