【发布时间】:2019-01-25 03:41:46
【问题描述】:
我一直在查看并尝试其他人针对此问题发布的所有解决方案,但我仍然没有得到它。
我的用例非常简单。我有一个带有按钮的 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
}
}
在我的目标视图控制器中:
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")
}
}
【问题讨论】:
-
你检查过 tabBarController 是否为 nil 吗??
-
@JarvisTheAvenger 我刚刚检查过,它不是零
-
你能分享更多代码还是只是你的导航结构。
-
尝试在视图中查看会出现视图控制器生命周期的方法。
-
@JarvisTheAvenger 好主意,我添加了一个 viewWillAppear 方法,它确实被调用了,但是 viewDidAppear 没有......知道为什么会这样吗?
标签: swift uitabbarcontroller viewdidload