見出し画像

【徒然iOS】気ままにUIKit38〜UITextView基本〜

概要

このマガジンは四十を過ぎたおっさんが、

を参考にStoryboardでiOSアプリを完全に趣味で楽しんでいるだけな記事を気ままに上げてます。

今回

をやる〜〜〜!

前準備

  1. 念の為、バックアップ

  2. 新しいクラス

  3. ビューコントローラの追加

  4. イニシャルビューの変更

をいつも通りやってから本題へ💃

こんな感じかな💦

本題

テキストビューとは、

複数行の文字を入力できるフィールド

ここら辺で既に、TextFieldViewについては軽くやってるね👀
今回はテキストビューってことで、、、💦

では早速、今回の記事の操作を🕺

⒈TextViewを追加

パーツ(上の+マークね)で選んで〜〜〜
配置して〜〜〜〜
余計なテキストを消して、Backgroundを適当な色に変更したところ〜〜〜

⒉シミュレータで試すと、、、

確かにキーボードが確定ボタンを押しても消えないね👀

⒊閉じるボタンを追加

nameをmyTextViewにして〜〜〜
アウトレット接続〜〜〜

⒋以下のコードを組み込み

     //余計な改行は削除した
       override func viewDidLoad() {
        super.viewDidLoad()
        //ビューを作成する。
        let testView = UIView()
        testView.frame.size.height = 60
        testView.backgroundColor = UIColor.blueColor()
        //「閉じるボタン」を作成する。
        let closeButton = UIButton(frame:CGRectMake(CGFloat( UIScreen.mainScreen().bounds.size.width)-70, 0, 70, 50))
        closeButton.setTitle("閉じる", forState:UIControlState.Normal)
        closeButton.backgroundColor = UIColor.redColor()
        closeButton.addTarget(self,action:"onClickCloseButton:", forControlEvents: .TouchUpInside)
        //ビューに「閉じるボタン」を追加する。
        testView.addSubview(closeButton)
        //キーボードのアクセサリにビューを設定する。
        testTextView.inputAccessoryView = testView
        //テキストビューのデリゲート先にこのインスタンスを設定する。
        testTextView.delegate = self
    }
    //「閉じるボタン」で呼び出されるメソッド
    func onClickCloseButton(sender: UIButton) {
        //キーボードを閉じる
        testTextView.resignFirstResponder()
    }
組み込むといつもどおりエラーが出てくるので👀
Fixで直してく〜〜〜
ここだけ赤が残って、見ると
Normalなんざねーすよ
と言ってるようなので
でnormalを選択して
黄色警告は残ってるけど、これはSenderとSelectorのヤツなので

再度、ここでシミュレータを実行してみよう

セレクターのインスタンスがおかしいって言ってるね👀
実は黄色警告を全て消して実行しても
結果は同じ様子👀

実は、、、

でやったタップジェスチャーと同じで、

SenderとSelectorの書き振りが既に変わっているから

なだけ!!!
なので、以下のコードに書き換えよう

//ここまでのコード
class TextViewStandardController: UIViewController, UITextViewDelegate {
    @IBOutlet weak var myTextView: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        //ビューを作成する。
        let myView = UIView()
        myView.frame.size.height = 60
        myView.backgroundColor = UIColor.blue
        //「閉じるボタン」を作成する。
        let closeButton = UIButton(frame:CGRectMake(CGFloat( UIScreen.main.bounds.size.width)-70, 0, 70, 50))
        closeButton.setTitle("閉じる", for:UIControl.State.normal)
        closeButton.backgroundColor = UIColor.red
        closeButton.addTarget(self,action:#selector(self.onClickCloseButton(_:)), for: .touchUpInside)
        //ビューに「閉じるボタン」を追加する。
        myView.addSubview(closeButton)
        //キーボードのアクセサリにビューを設定する。
        myTextView.inputAccessoryView = myView
        //テキストビューのデリゲート先にこのインスタンスを設定する。
        myTextView.delegate = self
    }
    //「閉じるボタン」で呼び出されるメソッド
    @objc func onClickCloseButton(_ sender: UIButton) {
        //キーボードを閉じる
        myTextView.resignFirstResponder()
    }
}

⒌シミュレータを実行

赤の閉じるボタンを押すと、、、
スクリーンショットだと分かりにくいけど、
はい、閉じた=完了🕺

⒍ここで一旦、バックアップをとって、後半のビューを追加しよう

こんな感じで追加して〜〜〜〜
配置して〜〜〜
アウトレット接続まで完了🕺
ここも予想どおり真っ赤っかなので直してく
はい、消えたので、

シミュレータで実行

横向き〜〜〜
閉じれた〜〜〜
縦向きも〜〜〜
同様〜〜〜🕺

はい、完了
今回の記事の内容は以上。

⒎ブラッシュアップ

今回は、次回以降の記事に続編がありそうなので、一旦、このままにしとく〜〜〜!

今回のコード(まとめ)

class TextViewStandardController: UIViewController, UITextViewDelegate {
    @IBOutlet weak var myTextView: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        //ビューを作成する。
        let myView = UIView()
        myView.frame.size.height = 60
        myView.backgroundColor = UIColor.blue
        //「閉じるボタン」を作成する。
        let closeButton = UIButton(frame:CGRectMake(CGFloat( UIScreen.main.bounds.size.width)-70, 0, 70, 50))
        closeButton.setTitle("閉じる", for:UIControl.State.normal)
        closeButton.backgroundColor = UIColor.red
        closeButton.addTarget(self,action:#selector(self.onClickCloseButton(_:)), for: .touchUpInside)
        //ビューに「閉じるボタン」を追加する。
        myView.addSubview(closeButton)
        //キーボードのアクセサリにビューを設定する。
        myTextView.inputAccessoryView = myView
        //テキストビューのデリゲート先にこのインスタンスを設定する。
        myTextView.delegate = self
    }
    //「閉じるボタン」で呼び出されるメソッド
    @objc func onClickCloseButton(_ sender: UIButton) {
        //キーボードを閉じる
        myTextView.resignFirstResponder()
    }
}

class TextViewStandardLotateRightController: UIViewController, UITextViewDelegate {
    @IBOutlet weak var myRightTextView: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        //ビューを作成する。
        let myRightView = UIView()
        myRightView.frame.size.height = 60
        myRightView.backgroundColor = UIColor.blue
        //閉じるボタンを作成する。
        let closeButton = UIButton()
        closeButton.setTitle("閉じる", for:UIControl.State.normal)
        closeButton.backgroundColor = UIColor.red
        closeButton.addTarget(self,action:#selector(TextViewStandardController.onClickCloseButton(_:)), for: .touchUpInside)
        //ビューに閉じるボタンを追加する。
        myRightView.addSubview(closeButton)
        //Autoresizingの変換をオフにする。
        closeButton.translatesAutoresizingMaskIntoConstraints = false
        //ボタンの幅の制約を追加する。
        myRightView.addConstraint(NSLayoutConstraint(
            item: closeButton,
            attribute: .width,
            relatedBy: .equal,
            toItem: nil,
            attribute: .width,
            multiplier: 0.0,
            constant: 70)
        )
        //ボタンの高さの制約を追加する。
        myRightView.addConstraint(NSLayoutConstraint(
            item: closeButton,
            attribute: .height,
            relatedBy: .equal,
            toItem: nil,
            attribute: .height,
            multiplier: 0.0,
            constant: 50)
        )
        //ボタンの右端とビューの右端を揃える制約を追加する。
        myRightView.addConstraint(NSLayoutConstraint(
            item: closeButton,
            attribute: NSLayoutConstraint.Attribute.trailing,
            relatedBy: NSLayoutConstraint.Relation.equal,
            toItem: myRightView,
            attribute: NSLayoutConstraint.Attribute.trailing,
            multiplier: 1.0,
            constant: 0))
        //ボタンの上端とビューの上端を揃える制約を追加する。
        myRightView.addConstraint(NSLayoutConstraint(
            item: closeButton,
            attribute: NSLayoutConstraint.Attribute.top,
            relatedBy: NSLayoutConstraint.Relation.equal,
            toItem: myRightView,
            attribute: NSLayoutConstraint.Attribute.top,
            multiplier: 1.0,
            constant: 0)
        )
        //キーボードにビューを追加する。
        myRightTextView.inputAccessoryView = myRightView
        //テキストビューのデリゲート先にこのインスタンスを設定する。
        myRightTextView.delegate = self
    }
    //閉じるボタンで呼び出されるメソッド
    @objc func onClickCloseButton(_ sender: UIButton) {
        myRightTextView.resignFirstResponder()
    }
}

今回の教訓

なんらかのジェスチャーでイベントを発生させる時に、
デリゲートとSenderとSelectorはセットなので、
SenderとSelectorの書き振りの変更に気をつけよう!!!!

Apple公式

さて、次回は

をやる〜〜〜〜!
時間があれば、平日もやるけど、多分、今週から土日にまとめて以降はやりそうな予感💦

さてと

午後からSwiftUIマスターマインズのサンプルコードを気が向いたらまとめるかな。

2023/2/27 午後追記

午後からちょっと真面目にSwiftUIマスターマインズのサンプルコードを

てな感じでひとつのアプリで全て動くように追加中。
5章〜18章までと全部で14個しかないので、これは

の気ままにUIKitが終わるまでに、まとめとければいいかなって感じ。

しかし、
やっぱこれやると2ヶ月かけてやってた洋書の技術書の良い振り返りになるなあ👀
ゆっくりまとめよ!!!!!

まだ今年後半の予告だけど、気ままにUIKitがひととおり区切りがつき次第

でSwiftUIの開発方法を今度は解説していく予定。
日本語のサイトだと、Swift自体が少ない上に、SwiftUIはさらに少なくなるからね〜〜〜〜

ちろっと趣味の開発環境(Xcode)画面を見せると

こんな感じ💦

マスターマインズのイメージだけ消したければ、、、

該当のコードをコメントアウトするだけで、イメージが消えて
もちろんちゃんとシミュレータでも実行できるヤツ

ここまでの記事で何回か触れてるけど、

storyboardって概念がない。
XIBファイルとかと連携もない。
アウトレットやアクションみたいな接続って概念がない
👉簡単なコードでの管理で、画面が簡単に作れる

のであくまでも、

UIKitは自分の振り返りも兼ねたお遊び
SwiftUIが最新のフレームワークで効率もいい
👉開発するならこっちがオススメ

ただし、UIKitでの標準的な組み込みかたに触れといた方が、SwiftUIの理解も早い
(例)UIKitのInitialize Controller → SwiftUIのContentViewみたいな感じのイメージがつながりやすい
ので、両方できるようになっていて損はない

って感じ。
あくまでも、趣味とか学習目的ならね

今時、会社でUIKitかObjective-Cでやってますとかって、面談とかで聞くと、

「わざわざ効率の悪い方でスマホアプリ開発してて、しかも、スマホアプリ開発は簡単ってイメージだけで短納期、、、💦この会社バカじゃないか?
企業でやってる方がSwiftUIでの開発ができてないって、
どちらが趣味でやってるのかわからない😱
会社は学校じゃないとか言ってそうだけど、
学校のお勉強レベルにもなってない」
👉それが日本の実力です 🤣

としか思わんけどね。

ま、ゆっくり過ごしても今年後半には、

SwiftUIの解説記事のみをどんどん上げる予定で動いてるから、UIKitでの開発にもうしばらく(4ヶ月くらいかな)

💃お付き合いをwww🕺

ま、もう個人で記事書いたり、スマホアプリする以外は、アホらしくて業務でやる気ないけどね 笑笑🤣
企業としてプログラミング以外の採用分野ですら、大真面目にやってるつもりで

な体たらくだし 笑笑🤣

技術力とアイデアさえあれば、7年以上前から
個人で世界にスマホアプリすら発信できる
時代に何やってんの?👀
マジで驚く⁉️

て感じ❗️
別に作りたいモノを作って公開するだけなら企業なんざ要らないし、
企業の方が最新のフレームワークすら使いこなせなくて、企業勤めしてもやりたい開発経験すら積めんなら勤めるメリットが何もないでしょ。

この記事が気に入ったらサポートをしてみませんか?