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

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

新規登録して質問してみよう
ただいま回答率
85.48%
ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Xcode

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

Swift

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

Q&A

解決済

1回答

1718閲覧

Swift:当該ラベルをドラッグ&ドロップした後、ラベルを複数作成する方法

enkaibuchyo

総合スコア13

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/06/01 02:03

編集2019/06/02 14:16

プログラミングをつい先日始めたばかりです。
インターネットを使用し調べたのですが、どうしても分からないことがあるため、御回答いただければ幸いです。よろしくお願い申し上げます。

前提・実現したいこと

前提はテキストに入力した言葉をボタンを押してラベルに反映させ、ラベルをドラッグ&ドロップさせることですが、ここまでは現在出来ております。実現したいことは、初めにドラッグ&ドロップをしたラベルをそのまま残しつつ、また新しくテキストを入力し反映させたラベルをドラッグ&ドロップ出来るようにすることです。ドラッグ&ドロップは画面内のどこへでもできるような設定を想定しています。

まとめ

①:テキスト入力したものをボタンを押して、ラベルに反映させ、そのラベルを画面内に自由にドラッグ&ドロップ出来るようにする←これは出来ている。
②:①のラベルをドラッグ&ドロップした位置に残しつつ、新たにテキストを入力しボタンを押してラベルに反映させ、画面内で自由にドラッグ&ドロップできるようにする。
③:全てのラベルが残るように、②の処理を永続的に繰り返せるようにする

②と③が出来る具体的なコードをご教示いただければ幸いです。

発生している問題・エラーメッセージ

最初に反映させたラベルを残しつつ、新規にラベルを作るプログラムが分からない点。

### 該当のソースコード import UIKit class ViewController: UIViewController, UITextFieldDelegate   { @IBOutlet weak var hockeyrink: UIImageView! @IBOutlet weak var TextFileld: UITextField! @IBOutlet weak var label: UILabel! @IBAction func ACTButton() { label.text = TextFileld.text label.isUserInteractionEnabled = true view.addSubview(label) } override func viewDidLoad() { super.viewDidLoad() self.TextFileld.delegate = self // Do any additional setup after loading the view. self.TextFileld.keyboardType = UIKeyboardType.numbersAndPunctuation } func textFieldDidBeginEditing(_ textField: UITextField) { } func textFieldShouldReturn(_ textField: UITextField) -> Bool { TextFileld.resignFirstResponder() return true } var gapX:CGFloat = 0.0 var gapY:CGFloat = 0.0 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch = touches.first { if let touchedview = touch.view { if touchedview.tag == 1 { gapX = touch.location(in: view).x - touchedview.center.x gapY = touch.location(in: view).y - touchedview.center.y touchedview.center = CGPoint(x: touch.location(in: view).x - gapX, y: touch.location(in: view).y - gapY) } } } } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch = touches.first { if let touchedview = touch.view { if touchedview.tag == 1 { touchedview.center = CGPoint(x: touch.location(in: view).x - gapX, y: touch.location(in: view).y - gapY) } } } } override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { gapX = 0.0 gapY = 0.0 } override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) { self.touchesEnded(touches, with: event) } } ```ここに言語名を入力 swift5を使用しています。 ### 試したこと ラベルを複数作成して、タグを指定しようと思いましたがその具体的なコードが分かりませんでした。そもそもラベルを複数設定する考え方で合っているのでしょうか。 ### 補足情報(FW/ツールのバージョンなど) Xcodeはバージョン10.2.1でございます。 不明な点は遠慮なくご質問ください。 何卒、御回答よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

動作検証はしていませんが、以下の様な処理はどうでしょうか。

Swift

1 @IBOutlet weak var label: UILabel! 2 @IBAction func ACTButton() { 3 let newLabel = UILabel() // ホタンを押す度に新しいUILabelを作成 4 newLabel.frame = self.label.frame // 表示位置・サイズは既存のUILabelと同じ 5 newLabel.text = TextFileld.text 6 newLabel.isUserInteractionEnabled = true 7 view.addSubview(newLabel) // 画面に追加表示 8 }

全てのラベルが残る → ボタンを押す度に新しいラベルを生成する

投稿2019/06/03 02:43

dsuzuki

総合スコア1682

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

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

enkaibuchyo

2019/06/04 04:14

本望の処理が出来ました。 誠にありがとうございます。 僭越ながら、ベストアンサーにさせていただきます。 dsuzuki様には御礼を申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問