why the viewDidAppear is not calling?
Asked Answered
B

1

10
import UIKit

import SwiftyDropbox

class NotesViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NotesviewDelegate {

var userText:[String] = []

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    print("View Did Load Notes view controller")
}

override func viewWillAppear(_ animated: Bool) {
    print("View will Appear")
    self.tabBarController?.navigationItem.title = "Notes"

    let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))

    self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
    self.automaticallyAdjustsScrollViewInsets = false
}

override func viewDidAppear(_ animated: Bool) {

    print("View Did appear Notes view controller")
    didDoneButtonPressed()

}

func goToNoteEditorViewController() {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    guard let vc = storyboard.instantiateViewController(withIdentifier:"NoteEditorViewID") as? NoteEditorViewController else{
        return
    }
    vc.delegate = self
    self.navigationController?.present(vc, animated: true, completion: nil)

}


public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{

    return userText.count
}


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
    cell.textLabel?.text = userText[indexPath.row]
    print("The cell is \(cell)")
    return (cell)
}

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

    let controller = UIStoryboard(name: "Main", bundle: nil)

    guard let viewController = controller.instantiateViewController(withIdentifier:"TextDisplayID") as? TextDisplayViewController else{
        return
    }

    let indexPath = tableView.indexPathForSelectedRow

    let currentCell = tableView.cellForRow(at: indexPath!)!

    let text = currentCell.textLabel!.text ?? ""
    print(currentCell.textLabel!.text ?? "")

    viewController.textTitle = text
    navigationController?.pushViewController(viewController, animated: true)
}

func didDoneButtonPressed() {

    let userDefaults = UserDefaults()

    if let dictionary = userDefaults.dictionary(forKey: "UserNotes"){
        if let dictionaryTexts = dictionary as? [String : String] {
            userText = [String](dictionaryTexts.keys)

            print("array values: \(userText)")
            self.tableView.reloadData()
        }
    }
}
}

In the above program the viewDidAppear is not call at the time of execution.Can anyone explain why this happen?

Boelter answered 11/5, 2017 at 5:32 Comment(6)
Add super.viewWillAppear(animated) & super. viewDidAppear(animated) as the first line for the methods viewWillAppear() & viewDidAppear()Folger
If your parent viewController did not called viewDidAppear then child ViewControllers will not call them as well. More explanationDariusdarjeeling
Only viewDidAppear isn't getting called? Or viewWillAppear too?Blooming
the only viewDidAppear is not calling.Boelter
Then probably you have overridden viewDidAppear in TabBarController and not called super.viewDidAppearBlooming
I just call the function in viewWillApear then it gets fixed.Now the viewDidApear is also working.Thank you @sasquatchBoelter
B
22

You should call super.viewWillAppear and super.viewDidAppear()

override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated: animated)
  print("View will Appear")
  self.tabBarController?.navigationItem.title = "Notes"

  let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))

  self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
  self.automaticallyAdjustsScrollViewInsets = false
}

Also

override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated: animated)
  print("View Did appear Notes view controller")
  didDoneButtonPressed()

}

EDIT

It seems you've subclassed UITabBarController. In your TabBarController, you need to call super.viewWillAppear() and super.viewDidAppear

class YourCustomTabBarController : UITabBarController {
   override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
  }

  override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
  }
}
Blooming answered 11/5, 2017 at 5:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.