投稿

ラベル(Swift4)が付いた投稿を表示しています

【Swift4】self.dimissが動かない

イメージ
この記事の概要 Swiftにおいて、self.dismissが動かない、機能しない場合の対処法を調べた。 目次 この記事の概要 目次 やろうとしたこと 解決策 まとめ やろうとしたこと 二つの画面を繋ぐViewControllerで、「ボタンを押したら戻る」とい処理を実装したい時、    self . dismiss (animated: true , completion: nil ) を使う人って結構多いんじゃないかな、と思う。 自分もその一人だったのだが、なぜかdismiss君が言うことを聞いてくれなかったので、 症状と解決策をまとめた。 所謂「メモ帳アプリ」を製作していた時のこと。 二つ目のViewControllerに記入した内容がボタンを押したら保存されて、一枚目のTableViewに表示される仕組みである。 だが、二枚目の「投稿する」ボタンを押しても、元の画面に戻ってくれない。       self . dismiss (animated:  true , completion:  nil ) は、ちゃんと書いている・・・。どうしてだろう・・・? [図]メモ帳アプリのstoryboard 解決策    self . navigationController ?. popViewController (animated: true ) 解決策はズバリ、dismissをこちらのコードに変更したことでした。 おそらく、navigationcontrollerでembed Inしてたんですが、それが悪さをしていてdismissを使えなくしていたんでしょう。

【Swift4】Swift初心者に贈る、画面遷移後に値を渡す方法【うまくいかない時は!!!!】

イメージ
Swiftを学んでいく上で、値渡しは避けては通れない関門ですよね。 例えば、画面Aに入力された値[変数X]を、画面遷移後の画面Bに[変数X]を表示する処理とかは、初めてプログラミング言語を触る人では頭の中に???が浮かびまくると思います。 自分も、値渡しは初見時は躓いて出来るようになったのですが、3ヶ月ほど会計試験の資格勉強のためにSwiftを触らなくなったら、全然できなくなっていました(> <;) 数時間の死闘の末、再びなんとか出来るようになったので、 「初心者でもわかる値渡し」を記事にしてみようと思います。 prepare(for:segue)とか、クラスを作ってコード簡略化しようぜ!とか、「ある程度プログラミングに慣れた人向けの」方法はたくさんあるんですが、趣味レベルのアプリであれば、誰でも簡単に実装できるように作っています。 それでは、どうぞ! ◇ 目次 ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇  1. 下準備 [Storyboard 編]  2. コードを書いていく  3. 実行してみた     4. まとめ  1. 下準備 [Storyboard 編] [図] Storyboard 新規プロジェクトを作る方法は割愛します。 main.storyboardを開いて、この2つの画面を作ってみました。 最初の画面はUItextfieldとUIButton、二つ目の画面は全てUILabelです。 実装するイメージとしては、 UIButtonを押したら、UITextFieldに入力された文字がUILabelに表示される処理を想像してもらえればいいと思います。 画面ができたら、 [図] StoryboardのSegue Segueで画面を繋ぎます。 個人的にSegueで繋いでいくのはあまり好きではないのですが、Segueを使わない画面遷移だと値渡しが出来なくなるので、プログラミングが上達するまではお世話になるしかないです!(笑) 重要なポイントは、Segueのidentifierを「 toSecond(任意の名前) 」にしておくことです! これにてStoryboardの設定・下準備は終了です。 ...

【Swift4】Storyboardを使わずに、コードだけでUIImageを表示する方法

イメージ
Storyboardで画像を表示する時に、StoryboardからUIImageのパーツを引っ張って@IBOutlet 接続してコードを書く人は多いと思う。 しかし、一つの画面の中にたくさんの画像がある場合は、その方法を使うとUIImageをたくさんStoryboardに配置する必要があるため、どうしても動作が重くなりがちだし、メモリも食ってしまう。 一枚の画像を置く時や趣味程度のアプリなどでは、この方法を使っても良いと思うのだが、複数の画像を設置する時やビジネスでアプリを製作する場合を見据えて、画像をコードで配置する方法を学んでいても良いのだと思う。 そこで、今回は画像をコードで配置する方法をまとめた。 ◇ 目次 ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇  1. 実現しようとした事  2. 解決策  3. 実行してみた     4. まとめ  1. 実現しようとした事 じゃんけんアプリのタイトルで、タイトル用にダウンロードした画像を中心に表示してみる。 ファイル名は"17431.jpg"としておき、デバイスの中心が、画像の中心と一致するようにし、そのまま画像を縮尺を変えずにデバイスの縦横まで引き伸ばす。  2. 解決策   // UIImage インスタンスの生成             let image1: UIImage = UIImage (named: "17431.jpg" )! //パー             // UIImageView 初期化             let imageView = UIImageView (image:image1)                          // スクリーンの縦横サイズを取得             le...

【Swift4】argument passed to call that takes no arguments の解決策

イメージ
今日、Swiftでじゃんけんアプリを作っていた時に、この「 argument passed to call that takes no argument s 」というエラーが出たのでエラーが出た状況と解決策をまとめていこうと思う。 argument passed to call that takes no arguments ◇ 目次 ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇  1. 実現しようとした事  2. Argument Passed to call that takes no argumentsとはどんなエラー?   3. 解決策     4. まとめ  1. 実現しようとした事 [図] myJankenViewControllerで発生したエラーの詳細  import UIKit   class myJankenViewController: UIViewController {       var selectedNumber: Int ( arc4random ( 2 ))                              !   Argument passed to call that takes no arguments     (以下省略)  } 「グー」「チョキ」「パー」の3種類の出目をCPUが出してくれる、そんなじゃんけんアプリを作っていたのだが、 相手のCPUの出目をarc4random関数で指定してあげようと思ったところ、このようなエラーが出てしまった。  2.  Argument Passed to call that takes no arguments とはどんなエラー?  日本語訳してみると、「 呼び出すために渡される引数は引数を取りません 」というのが妥当だろうか。 技術用語マシマシの英文翻訳は本当に難しい・・・orz つ...

【Swift4】TableViewのカスタムセルの高さが変わらない問題の解決法

イメージ
この記事の概要 UITableViewCellでカスタムセルのために使う.xibファイルを自前で用意したときに、何も設定を加えていない場合はカスタムセルの高さが自動的に変わらない。そこで、カスタムセルの高さに制約を加える方法について、自分なりにまとめた。 [図1] カスタムセルの画面 目次 この記事の概要 問題解決の指針 解説①: IBOutletのTableViewを使う方法 解説②: estimatedRowheightとautomaticDimensionを使う方法 まとめ 問題解決の指針 TableViewでカスタムセルを使うときに、高さを変えたい時ってありますよね。 例えば、TwitterやインスタグラムのようなSNSはTableViewを使っており、コンテンツの長さや高さによって、 そのセルの高さも変わっている。しかしカスタムセルの高さ変更は、Swiftではなかなか難しく、設定を加えないことでトラブルもよく起こる。 さて、カスタムセルの高さを変えたい時はどうすればいいのだろうか。 カスタムセルの高さを変えたい場合は、tableviewが入ったViewControllerに、このコードを書いてあげると、いいのである。 ポイントとしては、 ① @IBOutletのtableViewに、名前をつけてあげること。 ②  そのtableviewにestimatedRowHeightと, rowHeightの二つを定義するコードを書いてあげること。 class ViewController : UIViewController { @IBOutlet weak var tableView : UITableView ! override func viewDidLoad () { super . viewDidLoad () self . tableView . estimatedRowHeight = 90 self . tableView . rowHeight = UITableViewAutomaticDimension } (以下省略) 以下で...

【Swift4】iOSシミュレータでカメラとフォトライブラリが起動しない?試してみてわかったこと

イメージ
この記事の概要 以前同様の問題が発生したためにteratailに投稿したことがあるのだが、ここでももう一度まとめておこうと思う。一応、2018/11/19に私が投稿したteratailの記事を貼っておくので、 興味のある方はご一読ください。 iOSシミュレータでカメラとフォトライブラリが起動しない (https://teratail.com/questions/159144) 目次 この記事の概要 目次 実現したいこと 問題 解決策1:シミュレーターでうまく行かない場合 解決策2:実機でうまく行かない場合 まとめ 参考文献 実現したいこと Swift4のプロジェクトで、カメラ機能の実装を行いたいと思った。また、撮影した写真をアプリから呼び出せるようにアクションコントローラーを追記して、もしエラーが発生しているようなのであれば例外処理エラーでユーザーに知らせる、といった機能を実装するために、プロジェクトを作成した。そのためにSwiftで以下のようなコードを書いた。 class AddItemViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {   (中略)   @IBAction func selectImage(){   let actioncontroller = UIAlertController(title: "画像を選択", message: "選択してください", preferredStyle: .actionSheet)   let cameracontroller = UIAlertAction(title: "カメラ", style: .default) { (action) in if UIImagePickerController.isSourceTypeAvailable(.camera) == true{  let picker = UIImagePickerController() picker...