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

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

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

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

Swift

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

Q&A

1回答

1014閲覧

swiftを用いて入力した数のtextfieldを作成する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/07/29 05:30

編集2022/01/12 10:55

指定された数だけ入力欄を表示し、入力されたデータを表示するアプリを作ろうと考えています。
それにあたって、最初にアプリ上で数字を入力し、その入力された数だけ入力欄となるtextfieldをScrollview上に作成すろプログラムの書き方を教えていただきたく質問させていただきました。分かりにくい説明で申し訳ありませんが教えていただけると幸いです。

import UIKit class inputViewController: UIViewController { var 人数: Int = 0 @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var formView: UIView! private var nameTextField: [UITextField] = [] override func viewDidLoad() { super.viewDidLoad() func setNameTextField(num: Int){ for i in 1...num{ nameTextField.append(nameTextField[i-1]) nameTextField[i-1] = UITextField(frame: CGRect(x: 60,y: 190+i*30,width: 120,height: 30)) formView.addSubview(nameTextField[i-1]) self.view.addSubview(nameTextField[i-1]) } } //入力された数の名前用テキストフィールドを用意する関数 outNum.text = (String)(人数) //人数の表示 setNameTextField(num: 人数) //テキストフィールドの作成

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

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

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

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

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

fuzzball

2018/07/30 08:06

「上手くいきませんでした」ではなく、何がどう上手くいかないのか書いて下さい。(回答へのコメントではなく質問内に書いて下さい)
guest

回答1

0

やりたいことは動的にビューを生成する方法だと思います。
addSubviewでコード上からViewを追加することができます。
動的なレイアウト生成については、参考になる記事は色々あると思いますので調べてみてください。参考までにひとつ。
Swiftでビューを操作する

なので、流れとしてはtextfieldなどで数を入力、その数を取得してfor文で回数分textfieldをaddSubViewする(textFieldをinitする際にCGRectで位置や大きさを指定するので、addする位置を回数分下にずらしていくような感じになると思います)

ScrollViewで動的にコンテンツを増やすような感じだとViewサイズからはみ出るようになった場合に
ScrollViewのcontentSizeを変化させてやる必要があったかもしれません(ちょっと試してないのでうまくスクロールしなかったらその辺だと思ってください。)

もしくはTableViewにして動的に数を増やしていくようなやり方もあると思います。レイアウト的に同じようなものが続くようなものであればTableViewの方が楽かもしれません。(insertRowsとかreloadDataで更新する感じになると思います)

コードがわかりづらいのでこちらに追記:
一気に多くのことを考えてプログラミングしようとするとどこが上手くいかないのかわからなくなります。なので、まずは小さいところから始めてみましょう。以下、setNameTextFieldを直してみました。

func setNameTextField(num: Int){ // 入力された数だけループします。 for i in 0...num{ let textField = UITextField(frame: CGRect(x: 60,y: 190+i*30,width: 120,height: 30)) // textFieldを作りましょう。 textField.backgroundColor = UIColor.red // 白いとわかりずらいので赤くしました。 self.view.addSubview(textField) // scrollViewにaddしましょう。 } }

formViewは何をするかよくわからないので一旦外しました。
この前段階だとtextFieldを作ってscrollViewにaddSubViewして表示されるかどうかを確認すると言うところから入っても良いと思います。あとは順に自分の実装したいことを追加していきましょう。何かあればまた質問やコメントください。

投稿2018/07/30 02:13

編集2018/07/30 09:17
razuma

総合スコア1313

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

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

退会済みユーザー

退会済みユーザー

2018/07/30 07:52

有難うございます。 このtextFieldに入力された情報をのちのち取得し、利用するためには配列でtextFieldを定義し、for文生成すれば良いのでは無いかと考え、作ってみたのですが上手くいきませんでした。もし可能でしたらアドバイスをお願いできませんでしょうか。 元の質問にプログラムの方追記させていただきます。
fuzzball

2018/07/30 08:05

人数が0だからじゃないですか?
razuma

2018/07/30 09:16

一気に多くのことを考えてプログラミングしようとするとどこが上手くいかないのかわからなくなります。なので、まずは小さいところから始めてみましょう。以下、setNameTextFieldを直してみました。 func setNameTextField(num: Int){ // 入力された数だけループします。 for i in 0...num{ let textField = UITextField(frame: CGRect(x: 60,y: 190+i*30,width: 120,height: 30)) // textFieldを作りましょう。 textField.backgroundColor = UIColor.red // 白いとわかりずらいので赤くしました。 self.view.addSubview(textField) // scrollViewにaddしましょう。 } } formViewは何をするかよくわからないので一旦外しました。 この前段階だとtextFieldを作ってscrollViewにaddSubViewして表示されるかどうかを確認すると言うところから入っても良いと思います。あとは順に自分の実装したいことを追加していきましょう。何かあればまた質問やコメントください。
退会済みユーザー

退会済みユーザー

2018/08/01 11:12

お礼が遅くなってしまい申し訳ありません。 諸事情でXcodeを触れない状況にありまだ試せていないのですが先にお礼だけでも述べさせていただきたく返信させていただきました。丁寧な回答誠にありがとうございました。 もしかしたらお言葉に甘えてまたお聞きさせて頂くやもしれません。もしよければ、力を貸していただけると幸いです。
razuma

2018/08/01 12:01

ご丁寧にありがとうございます。わからない部分があればまたご質問いただければと思っております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問