4

そのため、編集可能な大きなテキスト ビューを表示するビューを作成しようとしています。ストーリーボードでは、テキスト「Take your notes here (下にスワイプしてキーボードを閉じます):」をプレースホルダーとして表示するように編集されています。

ユーザーがそれ以外のテキストをいつ編集したかを覚えておきたい... そこで、!= を使用して if ステートメントを作成しました。isEqualToString() を推奨しているため、アプリストアのレビューで承認されるかどうかはわかりません。

とにかく、以下のコードはそのビュー用です...ユーザーがプレースホルダーから変更した場合、入力されたテキストは記憶されていません。変更されたことを認識しますが、ビューに戻ると、デフォルトのプレースホルダーが再び表示されます...ヘルプ?

import Foundation
import UIKit

class MessageNotesViewController: UIViewController, UITextViewDelegate {

@IBOutlet weak var messageNotes: UITextView!
@IBOutlet var swiped: UISwipeGestureRecognizer!

var placeholder = "Take your notes here (Swipe Down to dismiss the keyboard): "

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)

    messageNotes.delegate = self
    messageNotes.text = placeholder

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func openIn(_ sender: AnyObject) {

    print("Share with Social Media or Copy to Notes")
    //let textToShare = messageNotes.attributedText

       // let objectsToShare = [textToShare]
        //let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)


    //activityVC.popoverPresentationController?.sourceView = (sender as! UIView)
    //self.present(activityVC, animated: true, completion: nil)


    if let notes = messageNotes.text {
        let avc = UIActivityViewController.init(activityItems: [notes], applicationActivities: nil)

        avc.popoverPresentationController?.barButtonItem = sender as? UIBarButtonItem
        self.present(avc, animated: true) {
            print("completed")
        }
    }
}

func touchesBegan(_ messageNotes: UITextField) -> Bool {
    self.view.endEditing(true)
    return false
}


//let defaults = NSUserDefaults.

override func viewWillDisappear(_ animated: Bool) {
    //PrepareForSegue didn't quite work
    print("View Will Disappear")

    //Testing if the user has entered any text if so preserve entered text
    if messageNotes.text != placeholder {

        //viewDidLoad(typedText)
        print("the user altered the text in some way. \n")

        placeholder = messageNotes.text
        // assigns new placeholder
    }
    else{
        // do something else - if needed
    }
}
}

//Sub class decleration for ActivityForNotesViewController as called in openIn
class ActivityForNotesViewController: UIActivityViewController {

internal func _shouldExcludeActivityType(_ activity: UIActivity) -> Bool {
    let activityTypesToExclude = [
    ]

    if let actType = activity.activityType() {
        if activityTypesToExclude.contains(actType) {
            return true
        }
        else if super.excludedActivityTypes != nil {
            return super.excludedActivityTypes!.contains(actType)
        }
    }
    return false
}
}

以下の回答を実装しようとしたときに、いくつかのコンパイル エラーが発生しました。

viewWillAppear 関数で、コンパイラは「非関数型 'UserDefaults' の値を呼び出せません」と表示します - コンパイラは、赤の下線付きの行if let newText行を強調表示します。UserDefaults.standardUserDefaults()

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)

    messageNotes.delegate = self
    messageNotes.text = placeholder

    if let newText = UserDefaults.standardUserDefaults().objectForKey("textKey"){
        if newText.length > 0 {
            messageNotes.text = newText
        }
    }

}

viewWillDisappear 関数で同じコンパイル エラーが見つかりました。

override func viewWillDisappear(_ animated: Bool) {
    //Prepare for segue didn't quite work for what I need
    print("View Will Disappear")

    //Testing if the user has entered any text if so preserve entered text
    if messageNotes.text != placeholder {

        //viewDidLoad(typedText)
        print("the user altered the text in some way. \n")

        UserDefaults.standardUserDefaults().setObject(messageNotes.text!, forKey:"textKey")

        // assigns new placeholder
    }
    else{
        // do something else - if needed
    }
}
}
4

1 に答える 1

0

変更をどこかに保存する必要があります。ユーザー設定やその他の小さなデータを保存するには、UserDefaults をお勧めします。

これを次のように置き換えますviewWillDisappear

placeholder = messageNotes.text

UserDefaults.standardUserDefaults().set(messageNotes.text!, forKey:"textKey")

そして、viewWillAppear私は追加します:

messageNotes.text = placeholder
if let newText = UserDefaults.standardUserDefaults().object("textKey"){
    if newText.length > 0 {
        messageNotes.text = newText as! String
    }
}
于 2016-07-22T14:41:58.193 に答える