Hi everybody
How to insert text of textView in table view?
I would like to learn how to pass data from DetailViewController to ViewController ?
ViewController:
class ViewController: UITableViewController {
var notes = [noteText]()
// navigation items
var editButton: UIBarButtonItem!
var cancelButton: UIBarButtonItem!
// toolbar items
var spacerButton: UIBarButtonItem!
var notesCountButton: UIBarButtonItem!
var newNoteButton: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
tableView.backgroundView = UIImageView(image: UIImage(named: "1x"))
title = "Notes"
navigationController?.navigationBar.prefersLargeTitles = true
// navigation items
editButton = UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(editTapped))
editButton.tintColor = .orange
navigationItem.rightBarButtonItem = editButton
// toolbar items
newNoteButton = UIBarButtonItem(barButtonSystemItem: .compose, target: self, action: #selector(newNoteTapped))
newNoteButton.tintColor = .orange
spacerButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
notesCountButton = UIBarButtonItem(title: "\(notes.count) Notes", style: .plain, target: nil, action: nil)
notesCountButton.setTitleTextAttributes([
NSAttributedString.Key.font : UIFont.systemFont(ofSize: 11),
NSAttributedString.Key.foregroundColor : UIColor.darkText], for: .normal)
toolbarItems = [spacerButton, notesCountButton, spacerButton, newNoteButton]
navigationController?.isToolbarHidden = false
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
notes.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let note = notes[indexPath.row]
cell.textLabel?.text = note.name
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "Details") as? DetailViewController {
vc.noteDetail = notes[indexPath.row] // Cannot assign value of type 'noteText' to type '[noteText]
navigationController?.pushViewController(vc, animated: true)
}
}
@objc func editTapped() {
}
@objc func newNoteTapped() {
let storyboard = UIStoryboard(name: "Main", bundle: nil);
let vc = storyboard.instantiateViewController(withIdentifier: "Details") as! DetailViewController
self.navigationController?.pushViewController(vc, animated: true)
}
}
DetailViewController:
class DetailViewController: UIViewController, UITextViewDelegate {
@IBOutlet var textView: UITextView!
var noteDetail: [noteText]!
override func viewDidLoad() {
super.viewDidLoad()
let share = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))
let done = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneTapped))
// add multiple UIBarButtonItem to a navigation bar.
navigationItem.rightBarButtonItems = [done, share]
// for show keyboard and automatic scroll down during type.
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)
notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
textView.textAlignment = .natural
}
@objc func shareTapped() {
let shareText = textView.text ?? "No text Found"
let vc = UIActivityViewController(activityItems: [shareText], applicationActivities: [])
present(vc, animated: true)
}
@objc func doneTapped() {
}
// keyboard adjustment.
@objc func adjustForKeyboard(notification: Notification) {
guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardScreenEndFrame = keyboardValue.cgRectValue
let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
if notification.name == UIResponder.keyboardWillHideNotification {
textView.contentInset = .zero
} else {
textView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height, right: 0)
}
textView.scrollIndicatorInsets = textView.contentInset
let selectedRange = textView.selectedRange
textView.scrollRangeToVisible(selectedRange)
}
}
noteText:
class noteText: Codable {
var name: String
init(name: String) {
self.name = name
}
}