【发布时间】:2019-07-26 11:14:12
【问题描述】:
我正在重新创建一个简单的应用程序,它是一个护理案例记录器,实际上它是一堆按钮或文本字段,它们将它们的 .text 值时间戳并粘贴到 UItextView 字段中,以创建一个按时间顺序排列的操作列表以供参考当护理人员写下他们的病人笔记时。
我使用 Xcode 模板创建了一个标签栏控制的应用程序。 我创建了 UIbuttons 和 UItextfields,它们创建字符串并将其粘贴到同一字段上的测试 UItextview 中。 我创建了一个创建时间戳字符串的函数
在第二个视图的 UItextview 上显示相同的字符串时遇到问题。
研究 因为我只是新手,所以我在这里阅读了很多关于用户默认值、segues、委托/协议的帖子,并且似乎无法在我的特定情况下有效地实现这些(仍然不确定我是否足够了解这些内容)。
我已经将字符串保存到 user.default 值中,然后我可以在第二个视图中使用该值和 func 来插入文本并清除 user.default 值,但我似乎不能让函数从第一个视图运行? (获取遇到nil值错误)。
我觉得这应该是一个非常简单的过程,所以不能让它发挥作用非常令人沮丧......
问题 所以我希望有人能够演示从 FirstViewController 获取 UItextField.text 输入的简单方法,然后当在 FirstViewController 上按下 UIbutton 时,将字符串传递给 SecondViewController 并将其插入 UITextView 字段(我不想显示第二个视图)。
从这个演示中,我希望我可以将解决方案逆向工程到我的代码中,以此作为学习机会,而无需将我的确切代码放在银盘上交给我。
import UIKit
class FirstViewController: UIViewController, UITextFieldDelegate {
// View OUTLETS
@IBOutlet weak var customNoteField: UITextField!
@IBOutlet weak var reportTextViewFieldTemp: UITextView!
@IBOutlet weak var lastEntryTV: UITextView!
@IBOutlet weak var caseIDTF: UITextField!
// Class VARIABLES
let timeButtonArray = ["blank0", "Call Received1", "Dispatched2", "Enroute3", "On Scene4", "At Patient5", "Depart Scene6", "At Hospital7", "Available8",]
// VIEW DID LOAD STUFF
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
self.customNoteField.delegate = self
}
//TIMING BUTTON PRESSED
@IBAction func timeButtonPressed(_ sender: UIButton) {
//GATHER DATA
let timingButtonInput = timeButtonArray[sender.tag]
let DTGstamp = dateTimeStamp()
//FORM STRING
let buttonData = ("\(DTGstamp) \(timingButtonInput) \n")
//SEND buttonDATA TO ReportViewController
/*??? The part I need help with*/
}
//CUSTOM ENTRY UITextfield PRESSED
@IBAction func customNoteDone(_ sender: Any) {
//GATHER DATA
let DTGstamp = dateTimeStamp()
let customNote = customNoteField.text
//FORM STRING
let customData = ("\(DTGstamp) \(customNote) \n")
//TEST FOR EMPTY TEXT
if customNote != "" {
//SEND customDATA TO ReportViewController
/*??? The part I need help with*/
}
//FUNCTION TO GENERATE DATE,TIME GROUP AS CONSTANT
func dateTimeStamp() -> String {
var date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "ddLLLyy HH:mm:ss"
print (dateFormatter.string(from: date))
return (dateFormatter.string(from: date))
}
}
//
// ReportViewController.swift
// EMS Case Logger
//
// Created by Allan Ravenscroft on 3/3/19.
// Copyright © 2019 Allan Ravenscroft. All rights reserved.
//
import UIKit
class ReportViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var reportTextViewField: UITextView!
@IBOutlet weak var reportEmailButton: UIButton!
@IBOutlet weak var reportEditButton: UIButton!
@IBOutlet weak var reportClearButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
hideKeyboardWhenTappedAround()
reportEditButton.layer.cornerRadius = reportEditButton.frame.height / 2
reportEmailButton.layer.cornerRadius = reportEmailButton.frame.height / 2
reportClearButton.layer.cornerRadius = reportClearButton.frame.height / 2
}
//Actions when the clear button is pressed
@IBAction func clearButtonPressed(_ sender: Any) {
reportTextViewField.text = ""
}
//Actions when the edit button is pressed
@IBAction func editButtonPressed(_ sender: Any) {
}
//Actions when the email button is pressed
@IBAction func emailButtonPressed(_ sender: Any) {
showMailComposer(bodytext: reportTextViewField.text)
}
}
【问题讨论】:
-
请使用单例。 quora.com/How-do-I-create-a-Singleton-class-in-Swift。我认为这是用于全局变量,即 JAVA 中的相同静态变量
-
您不想尝试直接更新第二个视图。事实上,第一个视图甚至不应该知道第二个视图的存在。您应该研究一种更结构化的方法来管理您的视图和数据以及其中的更改。最基本的模型和可以适应您的场景的模型是 MVC。来自始终优秀的 Ray Wenderlich 的教程:[raywenderlich.com/…。尝试仔细阅读本教程。在您的情况下,两个视图可以共享相同的模型
标签: ios uitextview swift4 data-transfer