質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

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

Q&A

解決済

1回答

1864閲覧

Storyboard(ボタン)とコントローラーのコネクトがおかしい

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2017/03/03 02:07

Storyboard(ボタン)とコントローラーのコネクトがおかしいかもしれません。
今、カメラアクセスと写真のアップロード部分を作っていて、それが実機でできません。
Xcodeから自分のiPhoneでアプリを起動したのですが
Camera access ボタンとPhoto upload ボタンは自分のiPhoneで表示されたのですが
それらは押せるだけしか機能がありません。Camera access ボタンを押したら、iPhone(実機)のカメラが開いて写真が撮れて、撮った写真をアプリに表示させたいです。Photo upload ボタンを押したら、iPhone(実機)のカメラロールが開き元からある写真の中から一枚を選べ、選択した写真をアプリに表示させたいです。
Main.storyboardのViewControllerボタン(黄色と四角形が組み合わさったもの)を押すと右側にCustom Classが出ると思うのですが、
その中のClassを選択すると作ったコントローラの指定ができ、ちゃんとボタンに機能をもたせたいコントローラが指定できます。
しかし、それぞれ機能を持つボタン(この場合はカメラやフォト読み込み)のCustom ClassのClassには何も選択されていません。
現在、例えばカメラボタンの状況は以下のようです。
イメージ説明

ボタンとコントローラーのコネクトを正しくさせ、
本来の機能を持ったアプリを作りたいのですが
どう直せば良いのでしょうか?
ちなみにコントローラには

import UIKit class SendController:UIViewController, UINavigationControllerDelegate,UIImagePickerControllerDelegate{ //定数 let ButtonCamera = 0 let ButtomRead = 1 let ButtonWrite = 2 //変数 var imageView:UIImageView = UIImageView() var btnCamera:UIButton = UIButton(type: .custom) var btnRead:UIButton = UIButton(type: .custom) var btnWrite:UIButton = UIButton(type: .custom) //ロード完了時に呼ばれる override func viewDidLoad() { super.viewDidLoad() // //カメラボタン生成 // self.view.addSubview(btnCamera) // //読み込み // self.view.addSubview(btnRead) // // イメージビューの生成 // self.view.addSubview(imageView) imageView.frame = CGRect(x: 150, y: 100, width: 200, height: 200) imageView.contentMode = .scaleAspectFit view.addSubview(imageView) btnCamera.frame = CGRect(x: 0, y: 100, width: 100, height: 100) btnCamera.setTitle("Camera", for: .normal) btnCamera.tag = ButtonCamera btnCamera.addTarget(self, action: #selector(self.onClick(sender:)), for: .touchUpInside) btnCamera.backgroundColor = UIColor.green self.view.addSubview(btnCamera) btnRead.frame = CGRect(x: 0, y: 200, width: 100, height: 100) btnRead.setTitle("Read", for: .normal) btnRead.tag = ButtomRead btnRead.addTarget(self, action: #selector(self.onClick(sender:)), for: .touchUpInside) btnRead.backgroundColor = UIColor.red self.view.addSubview(btnRead) btnWrite.frame = CGRect(x: 0, y: 300, width: 100, height: 100) btnWrite.setTitle("Write", for: .normal) btnWrite.tag = ButtonWrite btnWrite.addTarget(self, action: #selector(self.onClick(sender:)), for: .touchUpInside) btnWrite.backgroundColor = UIColor.blue self.view.addSubview(btnWrite) } //ボタンクリック時に呼ばれる func onClick(sender:UIButton){ if sender.tag == ButtonCamera { openPicker(sourceType: UIImagePickerControllerSourceType.camera) }else if sender.tag == ButtomRead { openPicker(sourceType: UIImagePickerControllerSourceType.photoLibrary) } } //アラートの表示 func showAlert(title: String?, text: String?) { let alert = UIAlertController(title: title, message: text, preferredStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) present(alert, animated: true, completion: nil) } //イメージピッカーのオープン func openPicker(sourceType:UIImagePickerControllerSourceType){ if !UIImagePickerController.isSourceTypeAvailable(sourceType){ showAlert(title: nil, text: "利用できません") return } //イメージピッカーの生成 let picker = UIImagePickerController() picker.sourceType = sourceType picker.delegate = self //ビューコントローラーのビューを開く present(picker, animated: true, completion: nil) } // // イメージピッカーのイメージ取得時に呼ばれる func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let image = info[UIImagePickerControllerOriginalImage]as! UIImage imageView.image = image //ビューコントローラーのビューを閉じる picker.presentingViewController?.dismiss(animated: true,completion:nil) } // //イメージピッカーのキャンセル取得時に呼ばれる func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.presentingViewController?.dismiss(animated: true, completion: nil) } }

と書きました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Storyboard(ボタン)とコントローラーのコネクトがおかしいかもしれません。

→そもそもコネクトができていません。
一般的にStoryboardを使用する場合、部品(ボタン)に対して何かしたときの動作をプログラムへ引き渡すためにIBActionというものをビューコントローラに定義する必要があります。

それぞれ機能を持つボタン(この場合はカメラやフォト読み込み)のCustom ClassのClassには何も選択されていません。

→今回のケース(ボタンのアクションとプログラムがコネクトできていない)とは関係ありません。
これは、StoryBoard上の設定だけでUIButtonに独自の設定を追加したいときなどに使います。(枠線の色太さを指定できるなど)

どう直せば良いのでしょうか?

→前述の通り、ボタンからビューコントローラーにIBActionでコネクトしてください。
Swift3で開発されていると思いますので以下あたりを参考にされてみてください。
http://programming-beginner-memo.com/?p=18

投稿2017/03/03 06:33

編集2017/03/03 07:21
xenbeat

総合スコア4258

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問