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

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

ただいまの
回答率

88.92%

UITextLabel UITextField UIImageViewについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 202

Udemy.seitaro

score 11

こんにちは
いつもお世話になっています。
教えてくださる方ありがとうございます。

今回の質問なのですが。
下の写真はiosアプリの一部なのですが、こちらには様々なジャンルが書かれた(UITextLabel or UITextField?)が配置されているのですが、こちらは下にスライドしていくとまた新しいジャンルが出てくるという仕組みなのですがこれはどのように作成することが可能でしょうか。
TabelViewで作成するのかと考えたのですができませんでした。(※できないというのは線がtableviewには線画追加されてしまったり、別々の位置に配置できないと考えたためです)

イメージ説明

質問多くなりすみません。
どなたか教えていただけますでしょうか。
お手数ですがよろしくお願いいたします。

イメージ説明
イメージ説明
イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Udemy.seitaro

    2020/07/14 14:36

    tNishikawa様
    そのような方に回答してもその後の質疑応答すら成り立たないことも多いのが事実です。
    私もそう感じます。
    >ご指摘にもありました通りに今回質問させていただいたもので一度質問はやめて基本をしっかり押さえてから出直してきたいと思います
    ご迷惑をおかけして申し訳ございません。

    キャンセル

  • TsukubaDepot

    2020/07/14 14:44

    まぁ、色々とご意見が出てくるのは当然ですが、やはり(おそらく)独学で限度が出てくるのも理解できます(私は今なお独学ですからその気持ちはわかります)。
    一応、Udemy.seitaroさんの過去のご質問は存じあげていますし、回答していますし、本当に全く丸投げする方とは違うと思っています。ただ、今回の場合は要件すら決まっていない点も多いので、あえて指摘しました。

    私はどちらかというと自分が学習したいため、知識の蓄積もかねて回答していることが多いのですが、今回のご質問についても私自身の学習を兼ねて既に手をつけ始めていますので、ちょっとまっててみてください。

    キャンセル

  • Udemy.seitaro

    2020/07/14 16:25

    まぁ、色々とご意見が出てくるのは当然ですが、やはり(おそらく)独学で限度が出てくるのも理解できます(私は今なお独学ですからその気持ちはわかります)〜〜〜〜〜〜
    TsukudaDepod様
    本当にご指摘ありがとうございます。
    丁寧で尚且つ的確でとても感謝しております。
    私自身も中学生でまだUdemyでしか勉強したことがなく甘えが出てここで丸投げな質問をしてしまったのだと感じています。他の方にもご迷惑をおかけして申し訳なく思っています。

    私はどちらかというと自分が学習したいため、知識の蓄積もかねて回答していることが多いのですが、今回のご質問についても私自身の学習を兼ねて既に手をつけ始めていますので、ちょっとまっててみてください。
    >本当に私なんかに教えていただき誠にありがとうございます。
    もし教えていただけるようでしたらこのまま未解決のままで置いておいて問題ないのでしょうか。
    お手数をおかけしてもうしわけございませんがよろしくお願い致します。

    キャンセル

回答 1

checkベストアンサー

0

たとえば、TagListView のようなフレームワークを使えば似たようなことは可能かもしれません。

ただし、TagListView は本当にタグを表示するだけなので、スクロール部分は別に実装が必要です。

具体的には TagListView を表示する View をスクロールビューに載せることで実装しています。
TagListView の実装よりも、もしかしたらスクロールビューの実装の方が大変かもしれません。StoryBoard で完結するのですが、私はいまだカンニングしなければ実装できません。

イメージ説明
スクロールしたら追加されるというのも詳しくはわかりませんが、おそらくこんな感じかな、という程度のサンプルです。

import UIKit
import TagListView

class ViewController: UIViewController, TagListViewDelegate {
    @IBOutlet weak var tagListView: TagListView!
    @IBOutlet weak var selectButton: UIButton!

    var tags = [
        " 🐱 動物・ペット ", " 🤣 コメディ ", " 🏀 スポーツ ", " 🎮 ゲーム ",
        " 🧐 How to・役立つ ", " ❤️ 家族 ", " 🎨 アート ", " 💃 ダンス ",
        " 🌹 ロマンス ", " 💄 Beauty "]
    var selectedTag = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        // MARK: tagListView の設定
        tagListView.delegate = self
        // ボタンの形状、間隔
        tagListView.cornerRadius = 20
        tagListView.marginX = 20
        tagListView.marginY = 20
        // 文字装飾関連
        tagListView.textFont = UIFont.systemFont(ofSize: 24)
        tagListView.tagBackgroundColor = .white
        tagListView.textColor = .black
        tagListView.borderColor = .systemGray6
        tagListView.borderWidth = 1
        // 選択された時の装飾
        tagListView.selectedTextColor = .white
        // 影の設定
        tagListView.shadowColor = .systemGray4
        tagListView.shadowOffset = CGSize(width: 2, height: 2)
        tagListView.shadowOpacity = 0.6
        // タグの追加
        tagListView.addTags(tags)
    }

    // MARK: 選択されたタグの文字列を表示
    @IBAction func selectButton(_ sender: Any) {
        var selectedTags = ""
        let tags = tagListView.selectedTags()
        // 選択されたタグを文字列として追加

        if tags.count != 0 {
            for i in tagListView.selectedTags() {
                selectedTags.append(i.titleLabel?.text ?? "")
            }
        } else {
            selectedTags = "選択なし"
        }

        let alertController = UIAlertController(title: "選択されたタグ", message: selectedTags, preferredStyle: .alert)
        let action = UIAlertAction(title: "了解", style: .default, handler: nil)
        alertController.addAction(action)

        present(alertController, animated: true, completion: nil)
    }

    // MARK: タグを選択された時に呼び出される delegate
    func tagPressed(_ title: String, tagView: TagView, sender: TagListView) {
        print(title)

        if tagView.isSelected == false {
            selectedTag = title
            // 選択されたタグの背景色を変更する
            tagView.selectedBackgroundColor = .systemGray4
        } else {
            selectedTag = ""
        }

        tagView.isSelected.toggle()
    }
}

追記

アウトレットの設定について

イメージ説明

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/15 05:08

    私が最後に載せたスクリーンショットと同じようなスクリーンショットを載せていただけますでしょうか。
    StoryBoardでUI部品の階層関係、および右側にはアウトレットの接続関係がわかるようなショットが一番判断しやすいかと思います。
    あと、この手のトラブルで一番解決しやすいのは、一からプロジェクトを作り直すことです。
    新しくプロジェクトを作り直し、StoryBoardは新規に作成し、ソースコードだけコピーして流用する方法です。
    しかし、まずはスクリーンショットからお願いしたいと思います。

    キャンセル

  • 2020/07/15 07:05

    TskudaDepod様
    お世話になっています。
    あと、この手のトラブルで一番解決しやすいのは、一からプロジェクトを作り直すことです。
    >こちらでstoryboadを一度削除してもう一度viewcontrollerを追加して紐付けしたら通りました。
    ご迷惑をおかけして申し訳ございません。


    今回の質問でTagViewについて学ばせていただきました。
    とても貴重なご意見ありがとうございました。
    とてもいい経験になりました。
    今後は修正依頼のところにも記載がありましたように少し自分の知識不足があるので本やUdemyなどで勉強したいと考えています。
    今回はありがとうございました。
    またの機会があればよろしくお願いいたいします。

    キャンセル

  • 2020/07/15 07:17

    解決したようでよかったです。
    私も同じですが、iOSでやってみたいことはたくさんあるかと思います。
    しかし、それらは基本的な技術の積み重ねであって、基本的な技術が疎かなまま、上位の技術を身に付けることは難しいかと思います。
    大きいことを望むことは否定しませんし、私にその資格はありませんが、それを確実に実現したいのであれば、たとえばStoryBoardでごく簡単な部品を並べ、それらの動作を思うようにできること、クロージャや非同期の処理について、簡単な例で理解を深めること、オプショナル値の扱いに不安があれば、自分で簡単なサンプルを書いてその挙動を確かめられるなど、基礎と復習は重要になります。
    Udemyやyoutubeなどの教材も否定しませんし、Udemyはいくつか教材を見たこともありますのでその内容も多少は把握していますが、初心者向けといいながら基礎を飛ばして難しい内容に挑戦しているコースも見受けられます。
    まずは、本当に基本的なことを繰り返し実践し、大きなことに挑戦するときには、その内容が「どのような基礎技術の集合で成り立っているのか」が理解できるようになってから挑戦する、というのが結局は早道かと思います。

    そういう私も技術はさっぱりなので適切な回答やアドバイスを行えているのかは自信がありませんし、むしろ私が勉強させてもらっているところもありますが、もし今後もなんらかのお役に立てればと思います。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る