J'ai une sous-classe de UITabBarController a déclaré comme suitUITabBarController didSelect et shouldSelect pas appelé plus après la présentation et rejetant webView
class TabbarViewController: UITabBarController, UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
self.currentTabIndex = tabBarController.selectedIndex
if self.currentTabIndex == 2 {
let reportVC = UIWindow.getVisibleViewControllerFrom(tabBarController) as? ReportsViewController
if let reportsViewController = reportVC {
if reportsViewController.reportTableView.numberOfRows(inSection: 0) > 0 {
reportVC?.reportTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
let navVC = viewController as? UINavigationController
let destinationVC = navVC?.viewControllers.last as? ReportsViewController
return (destinationVC != nil) ? false : true
}
}
}
return true
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
let newIndex = tabBarController.selectedIndex
let tabIndexList = [0, 1]
if self.currentTabIndex == newIndex && tabIndexList.contains(newIndex) {
let hbgViewController = (newIndex == 2)
? tabBarController.selectedViewController as! UINavigationController
: tabBarController.selectedViewController as! DLHamburguerNavigationController
switch newIndex {
case 0:
let alertsViewController = hbgViewController.viewControllers[0] as! AlertsViewController
alertsViewController.alertsTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
break
case 1:
let newsViewController = hbgViewController.viewControllers[0] as! NewsViewController
newsViewController.newsTableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
break
default:
break
}
}
}
}
Lorsqu'un utilisateur tape sur l'onglet sélectionné, les rouleaux de Tableview vers le haut. Cela fonctionne comme prévu, cependant, lorsque l'utilisateur appuie sur un élément dans la vue de table, un webview est chargé avec un article de nouvelles à distance. Une fois que la vue est ignorée, le code ci-dessus ne fonctionne plus, Les onglets de navigation fonctionnent, mais didSelect
et shouldSelect
ne sont plus appelés. Je ne sais pas pourquoi.
Voilà comment est présenté le WebView:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let newImageSource = self.newsArticles?[indexPath.row].getImageUrl(type: Article.FireNewsImageType.NewsFeed)
let articleURLString = self.newsArticles?[indexPath.row].url
let webViewController = GDWebViewController()
webViewController.title = self.newsArticles?[indexPath.row].title
let webVCNav = UINavigationController(rootViewController: webViewController)
webViewController.showsToolbar = false
webViewController.progressIndicatorStyle = .both
webViewController.loadURLWithString(articleURLString!)
let cancel = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(NewsViewController.dismissVC))
webViewController.navigationItem.rightBarButtonItem = cancel
self.present(webVCNav, animated: true, completion: nil)
}
GDWebViewController se trouve ici si nécessaire: https://gist.github.com/elimence/91cf35dfe677b38b23a27c6d54d44285
Les pointeurs serait apprécié merci :)
Salut, avez-vous défini le 'delegate'' TabbarViewController' à lui-même? –
@ZonilyJame damn! c'est la raison. Je l'ai défini dans viewDidLoad et désactivé dans viewWillDisappear, mais j'ai oublié de le redéfinir dans viewWillAppear. Je suis super reconnaissant :) Si vous fournissez une réponse, je l'accepterai. –