Swift Playgrounds에서 간단한 노트 앱을 만들려고하고 있는데 막혔습니다.Swift Playgrounds의 간단한 노트 앱
스토어 보드가 없으므로 마스터보기 (UITableView
)에서 상세보기 (UITextView
)로 데이터를 보내고 그 반대의 경우는 prepareForSegue
이 아닌데 어떻게 보낼 수 있습니까?
무엇이 잘못되었거나 잘못 되었습니까?
저는 솔루션을 찾기 위해 노력하고 있습니다. 따라서 도움을 주시면 대단히 감사하겠습니다. ,
import UIKit
import PlaygroundSupport
class MasterViewController: UITableViewController {
var noteData: [String] = []
var selectedRow: Int = -1
var newRowLabel: String = ""
override func viewDidLoad() {
configureNavigationBar()
loadNote()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if selectedRow == -1 {
return
}
noteData[selectedRow] = newRowLabel
if newRowLabel == "" {
noteData.remove(at: selectedRow)
}
tableView.reloadData()
saveNote()
}
@objc func newNote() {
let noteTitle: String = ""
noteData.insert(noteTitle, at: 0)
let indexPath: IndexPath = IndexPath(row: 0, section: 0)
tableView.insertRows(at: [indexPath], with: .automatic)
tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
navigationController?.pushViewController(DetailViewController(), animated: true)
}
func configureNavigationBar() {
title = "Notes"
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(newNote))
navigationItem.rightBarButtonItem = addButton
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return noteData.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
}
cell?.textLabel?.text = noteData[indexPath.row]
return cell!
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
noteData.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
saveNote()
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
navigationController?.pushViewController(DetailViewController(), animated: true)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let detailView: DetailViewController = segue.destination as! DetailViewController
selectedRow = tableView.indexPathForSelectedRow!.row
detailView.masterView = self
detailView.setText(noteText: noteData[selectedRow])
}
func saveNote() {
UserDefaults.standard.set(noteData, forKey: "Notes")
UserDefaults.standard.synchronize()
}
func loadNote() {
if let loadedNote = UserDefaults.standard.value(forKey: "notes") as? [String] {
noteData = loadedNote
tableView.reloadData()
}
}
}
class DetailViewController: UIViewController {
let textView = UITextView()
var noteText: String = ""
var masterView: MasterViewController!
override func loadView() {
configureDetailView()
}
override func viewDidLoad() {
configureTextView()
}
func configureDetailView() {
view = textView
}
func configureTextView() {
textView.text = noteText
}
func setText(noteText: String) {
if isViewLoaded {
textView.text = noteText
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
masterView?.newRowLabel = noteText
}
}
let masterViewController = MasterViewController()
let navigationController = UINavigationController(rootViewController: masterViewController)
PlaygroundPage.current.liveView = navigationController
@cldrr에게 회신을 읽어주십시오. – Boletrone
@ BoleTzar 방금 해결해야 할 코드에 문제가있는 곳을 지적하여 답변을 업데이트했습니다. –