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

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

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

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

Swift

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

Q&A

1回答

2024閲覧

【Swift2.0】送られてきたテキストの文字をTextViewに表示させたい

3buro

総合スコア29

Xcode

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

Swift

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

1グッド

0クリップ

投稿2016/01/09 03:32

編集2022/01/12 10:55

いつもお世話になっております。

【実装したい機能】
・MessageEditViewControllerで入力した文章を
ProccesingViewController(遷移先)にTextViewとして表示する
(入力した文章量に合わせてTextViewのサイズを変更する)
・ProccesingViewControllerに書き出したTextViewを再編集する
(再編集する場合はMessageEditViewControllerに戻る)

【現状】
・MessageEditViewControllerで入力した文章を
ProccesingViewController(遷移先)にTextViewとして表示できたが、
TextViewのサイズが文章に合っておらず、すべて表示されない
・TextViewにフォーカスが移った場合、MessageEditViewControllerに
遷移する記述を書いているが、テキストの取得と表示の仕方、
TextViewへの上書きの仕方がわからない
・MessageEditViewControllerに遷移したあと、その画面を閉じようとすると
再度キーボードが立ち上がる

【教えていただきたいこと】
・文章量にあったTextViewの書き出し方
・TextViewを再編集させるコードのスマートな記述方法
(TextViewへのフォーカスでなく、ダブルタップで画面遷移を指定させる方法など)
・TextViewのTextの渡し方、TextViewの上書き方法など

---1/12追記---
Messageクラスについて追記しました。
書き出したビューをタッチイベントで動かしています。
書き出したビューの削除はdeleteボタンを作成し、そこで削除しています。
2つ目の質問に関してもう少し具体的に説明いただけたら、と思います。

---1/14追記---
回答をもとに記述を追加しました。
画面遷移の方法について助言、添削、別の記述方法などあればぜひとも教えてください。

コードの添削、助言、参考サイトなどを教えていただけるとありがたいです。
恐れ入りますが、なにとぞよろしくお願いします。

<<MessageEditViewController>>

import UIKit class MessageEditViewController: UIViewController, UITextViewDelegate { @IBOutlet var txtView: UITextView! var senderTxt: String! var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate override func viewDidLoad() { super.viewDidLoad() txtView.delegate = self txtView.keyboardType = .Default txtView.becomeFirstResponder() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) txtView.text = senderTxt } @IBAction func decideTapped() { let message = Message() //textview.textを何かにいれて渡す? message.text = txtView.text let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.letterMessageArray.append(message) appDelegate.isNewLetterMessageAdded = true self.dismissViewControllerAnimated(true, completion: nil) } @IBAction func closeTapped() { //ifでアラートを表示(編集を完了していませんがよろしいですか?) self.view.endEditing(true) self.dismissViewControllerAnimated(true, completion: nil); } }

<<ProccesingViewController>>---1/14追記---

import UIKit class LetterProcessingViewController: UIViewController, UIAlertViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate, UITextViewDelegate { @IBOutlet var letterSetView: UIView! @IBOutlet var letterImageView: UIImageView! @IBOutlet var stampImageView: UIImageView! @IBOutlet var PhotoSelectView:UIImageView! @IBOutlet var PhotoSelectButton:UIButton! var imageArray:[UIImage] = [] var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate var messageString: String! var messageCount = 1 override func viewDidLoad() { super.viewDidLoad() letterImageView.userInteractionEnabled = false Photo() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) if appDelegate.isNewLetterMessageAdded == true { let message = appDelegate.letterMessageArray.last! let fixedWidth = message.frame.size.width message.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) let newSize = message.sizeThatFits(CGSizeMake(fixedWidth, CGFloat.max)) var newFrame = message.frame newFrame.size = CGSizeMake(max(newSize.width, fixedWidth), newSize.height) message.frame = newFrame message.textContainerInset = UIEdgeInsetsMake(5, 5, 5, 5) message.sizeToFit() message.scrollEnabled = false //message.frame = CGRectMake(0, 0, 150, 0) //message.backgroundColor = UIColor.clearColor() message.font = UIFont.systemFontOfSize(14.0) message.center = stampImageView.center message.userInteractionEnabled = true message.editable = true message.delegate = self letterSetView.addSubview(message) messageCount = messageCount + 1 appDelegate.isNewLetterMessageAdded = false } } func messageEditButton() { print("messageEditButton") //print(myMessages) let MES = MessageEditViewController() MES.senderTxt = myMessages MES.modalTransitionStyle = UIModalTransitionStyle.CoverVertical self.presentViewController(MES, animated: true, completion: nil) } //テキストビューにフォーカスが移った場合 func textViewShouldBeginEditing(textView: UITextView) -> Bool { print("テキストビュー触ってる") let text = appDelegate.letterMessageArray.last! // テキストをストリング型に入れる let ms = storyboard?.instantiateViewControllerWithIdentifier("MessageEdit") as! MessageEditViewController ms.modalTransitionStyle = UIModalTransitionStyle.CoverVertical ms.txtView = text self.view.endEditing(true) self.presentViewController(ms, animated: true, completion: nil) return true } //テキストビューからフォーカスが失われた場合 func textViewShouldEndEditing(textView: UITextView) -> Bool { print("テキストビューから離れた") return true } @IBAction func messageTapped() { let ms = storyboard?.instantiateViewControllerWithIdentifier("MessageEdit") as! MessageEditViewController ms.modalTransitionStyle = UIModalTransitionStyle.CoverVertical self.presentViewController(ms, animated: true, completion: nil) } }

<<Message>>---1/14追記---

import UIKit class Message: UITextView, UIGestureRecognizerDelegate { var currentTransform: CGAffineTransform! var scale: CGFloat = 1.0 var angle: CGFloat = 0 var isMoving: Bool = false override func didMoveToSuperview() { let rotationRecognizer: UIRotationGestureRecognizer = UIRotationGestureRecognizer(target: self, action: "rotationGesture:") rotationRecognizer.delegate = self self.addGestureRecognizer(rotationRecognizer) let pinchRecognizer: UIPinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: "pinchGesture:") pinchRecognizer.delegate = self self.addGestureRecognizer(pinchRecognizer) let tapRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapGesture:") tapRecognizer.numberOfTapsRequired = 1 tapRecognizer.delegate = self self.addGestureRecognizer(tapRecognizer) } func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } func tapGesture(gesture: UITapGestureRecognizer) { print("tapGesture") myMessage = self.titleLabel?.text print(myMessage) //メソッドの呼び出し let LP = LetterProcessingViewController() LP.myMessages = myMessage LP.messageEditButton() } func rotationGesture(gesture: UIRotationGestureRecognizer) { if !isMoving && gesture.state == UIGestureRecognizerState.Began { isMoving = true currentTransform = self.transform } else if isMoving && gesture.state == UIGestureRecognizerState.Ended { isMoving = false scale = 1.0 angle = 0.0 } angle = gesture.rotation let transform = CGAffineTransformConcat(CGAffineTransformConcat(currentTransform, CGAffineTransformMakeRotation(angle)), CGAffineTransformMakeScale(scale, scale)) self.transform = transform } func pinchGesture(gesture: UIPinchGestureRecognizer) { if !isMoving && gesture.state == UIGestureRecognizerState.Began { isMoving = true currentTransform = self.transform } else if isMoving && gesture.state == UIGestureRecognizerState.Ended { isMoving = false scale = 1.0 angle = 0.0 } scale = gesture.scale let transform = CGAffineTransformConcat(CGAffineTransformConcat(currentTransform, CGAffineTransformMakeRotation(angle)), CGAffineTransformMakeScale(scale, scale)) self.transform = transform; } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { self.superview?.bringSubviewToFront(self) } override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { let touch = touches.first! let dx = touch.locationInView(self.superview).x - touch.previousLocationInView(self.superview).x let dy = touch.locationInView(self.superview).y - touch.previousLocationInView(self.superview).y self.center = CGPointMake(self.center.x + dx, self.center.y + dy) } }
ikuwow👍を押しています

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

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

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

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

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

Stripe

2016/01/09 18:21

Messageクラスって何ですか?
Stripe

2016/01/09 18:24

ms.txtView = text ってやったら、MessageEditViewControllerが@IBOutletされたUITextViewを参照できなくなるのでは?
Stripe

2016/01/09 18:26

letterSetView.addSubview(message) ここで追加したmessageはどこで削除しているんですか?
Stripe

2016/01/12 13:51

あなたは、LetterProcessingViewControllerクラスのtextViewShouldBeginEditing()関数内に、「ms.txtView = text」と書いています。 MessageEditViewControllerクラスのtxtView変数の内容を上書きしていますよね?
Stripe

2016/01/12 15:58

ところで、TextViewの編集を別のViewControllerでやる理由は何ですか?TextViewのタップで画面遷移させなくても、そのままTextViewで編集できると思いますが?
3buro

2016/01/13 00:31

何もないところからメッセージテキストを表示させるボタンを使用して、テキストビューを吐き出してます。そこでメッセージを作成しているので、編集もそちらで…と思ったことが、TextViewの編集を別のViewControllerでやる理由です。
guest

回答1

0

まず、LetterProcessingViewControllerのTextViewを編集不可にしてください。
そして、TextViewの編集開始ではなく、タップで編集画面へ遷移してください。

投稿2016/01/13 16:19

Stripe

総合スコア2183

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

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

3buro

2016/01/14 01:54

回答ありがとうございます。 TextViewを動かしているMessage.swiftにタップジェスチャーでのイベントを追加し、そこで画面遷移させる記述を行いました。 画面遷移させる記述のところでエラーが出てしまい、そこから二進も三進もいかない状況です。self.presentViewController(MES, animated: true, completion: nil)の記述を用いているのですが、これが間違いなのでしょうか?
Stripe

2016/01/15 08:10

もともと、画面遷移はできていたはずでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問