Я смотрел и пробовал все решения, которые другие опубликовали для этой проблемы, но я до сих пор не понимаю.
Мой вариант использования очень прост. У меня есть viewController с кнопкой, когда эта кнопка нажата, я хочу перейти на другую вкладку и перезагрузить данные, включая вызов API.
При использовании кнопки я хорошо перехожу на вкладку, но viewDidAppear не вызывается.
Если на другой вкладке и перемещаться с помощью панели вкладок, viewDidAppear работает нормально. Также viewWillAppear работает, но я должен добавить ручную задержку к функциям, которые я хочу вызвать, так что это не идеально.
Так что же мне нужно сделать, чтобы перемещаться с помощью self.tabBarController.selectedIndex = 0 и получать функциональность viewDidAppear?
Обновление: Вызванный мною метод viewWillAppear вызывается, но я вынужден добавить задержку для своих функций, чтобы они работали, и это немного неуклюже, не идеально. Не уверен, почему viewDidAppear не будет работать: (
Вот скриншот структуры:
Я ценю любую помощь в этом!
«Текущий» ViewController - это индекс моей вкладки 2:
import UIKit
class PostPreviewVC: UIViewController {
//Here I create a post object and post it to the timeline with the below button
@IBAction func postButtonPressed(_ sender: Any) {
//create the post via Firebase api
self.tabBarController?.selectedIndex = 0
}
}
В моем пункте назначения viewController:
import UIKit
import Firebase
import SDWebImage
import AVFoundation
class HomeVC: UIViewController {
// MARK: - PROPERTIES
var posts = [Post]()
let refreshControl = UIRefreshControl()
//more properties...
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
configureTableView()
reloadTimeline()
UserFirebase.timeline { (posts) in
self.posts = posts
self.tableView.reloadData()
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("viewDidAppear")
_ = self.view
setupUI()
configureTableView()
reloadTimeline()
UserFirebase.timeline { (posts) in
self.posts = posts
self.tableView.reloadData()
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("viewWillAppear")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.reloadTimeline()
self.configureTableView()
}
}
//All the tableview code below here...
}
Добавлен пользовательский класс для контроллера панели вкладок:
import UIKit
class TabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("viewDidAppear in tabBar custom Class called")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("viewWillAppear in tabBar custom Class called")
}
}