いつもお世話になっております。
【実装したい機能】
・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) } }