- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在查看并尝试其他人针对此问题发布的所有解决方案,但我仍然没有得到它。
我的用例非常简单。我有一个带有按钮的 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
}
}
在我的目标 View Controller 中:
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...
}
为我的标签栏 Controller 添加了一个自定义类:
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")
}
}
最佳答案
当您使用 UITabBarController
时,viewDidLoad
方法只会在任何 UIViewController
加载到内存中时调用一次。之后,当您浏览同一个 UIViewController
时,它将从内存中加载。
为了克服这个问题,你必须把你的代码分成viewDidLoad
& viewDidAppear
。因此,在 viewDidLoad
中,您只需在整个应用程序中放置要初始化一次的代码,例如添加 UIView
或其他内容,而在 viewDidAppear
/viewWillAppear
,你可以进行 API 调用或一些获取动态数据的函数。
最后,当您调用 self.tabBarController.selectedIndex = 0
时,它只会调用一次 viewDidLoad
和 viewDidAppear
/ viewWillAppear
每次当您浏览那个 UIViewController
时。
希望这有助于理解 UITabBarController
的工作原理。
关于swift - self.tabBarController.selectedIndex 不调用 viewDidAppear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54358652/
我是 IOS/objective-c/xcode 的新手,请多多包涵。我的问题是我不知道如何在标签栏中设置标签栏。 首先:我成功创建了一个 UITabBarController 和他的 View :
我正在开发一个项目,当我们选择某些内容时,Initial View 有一个 PickerView。我将此数据作为 String 传递给 TabBarController,然后从 TabBarContr
我想知道如何在 Xcode 中创建嵌套的 UITabBarControllers,我正在使用 Swift。 我的第一个 UITabBarController 有两个项目:Search (UITable
我正在呈现来自另一个 ViewController (HomeViewController) 的 UITabBarController。 TabBarController 又包含 UINavigati
已编辑 有人可以解释[self.tabBarController setSelectedIndex:1];和self.tabBarController.selectedIndex = 1;之间的区别
在多个 Storyboard中工作。从点 A->TabBarController(tab 2)->NavigationControllerA->StoryboardReference->Navigat
我有一个自定义的 UITabBarController。我正在记录与它一起使用的 4 个 ViewController,我得到了我期望的结果。 但是,当我点击 NavigationController
我想以编程方式制作tabbarcontroller。 tabBarController 未显示在页面中。谁能告诉我们出了什么问题吗?我们可以在一个应用程序中制作多个 tabbarcontroller
我是 iPhone 开发者的初学者,我正在开发我的第一个应用程序。实际上,我已经很好地创建了一个 Tab Bar 应用程序,但我想在运行应用程序时添加启动画面。 我在 Loading a Welcom
我似乎还没有对 UITabBar、UITabBarController 和导航 Controller 有足够的了解来做我想做的事情。我希望有人可以提供一些指导。 我总共有 8 个 VC。我希望其中五个
在我的应用程序的设置部分,用户可以选择更改应用程序的语言。所以当用户选择西类牙语 作为他的主要语言,该应用程序以西类牙语显示内容在他重启应用后但我想更改语言在飞行中 .这适用于主要内容,如 Table
我创建了一个选项卡栏 Controller ,我注意到当我更改选项卡时,它会发生突然的变化场景。有没有办法让它在选项卡更改时滑动到该选项卡? 最佳答案 我认为 UITabBarController 不
我的应用程序是基于选项卡的应用程序,它有 8 个选项卡。所以它有“更多”按钮 用户可以在其中重新排序选项卡。 但是在某些 ViewController 中,当用户单击按钮时,我需要转到另一个选项卡。我
我创建了一个带有 4 个 UIViewController 的 TabBarController。但是,当我想在 TabBarController 中显示 ViewController 之一时: fu
所以我是一名初级开发人员。并且只是想拥有一个 UITabBarController。我启动了一个新的基于 View 的应用程序。遵循 iPhone 开发初学者(第 7 章)中 Mark、Nutting
我正在开发一个 iphone 应用程序,其中前四个屏幕是基于导航的。 从第五个屏幕开始,设计更改为基于 Tabbar 的.在这个基于标签栏的部分中,我们能够导航每个标签上的 subview 。 我如何
我在我的应用程序中使用了标签栏 Controller 。在应用程序的大部分行为中,我们只有一个方向 (interfaceOrientationPortrait)。但我有一个在 WebView 中运行视
我一直在试图找出为什么 TabBarController 总是可见的。我一直在尝试实现每次更改 View Controller 时都不会重新加载的 iAd。通过将 iAd 附加到 TabBar,我能够
在我的模态视图 Controller 中,您可以在两个选项之间进行选择,然后每个选项都显示一个 tabBar 等等。我的模态视图显然会自动旋转,但 tabBar 不会,即使我为项目中的每个 UIVie
我已经以编程方式创建了一个带有 View 等的TabBarController。现在我想在按下按钮时显示这个TabBarController。我怎么做?目前我以模态方式呈现它,但它不起作用 - 抛出
我是一名优秀的程序员,十分优秀!