我从默认的选项卡式应用程序开始,在故事板中添加了一些带有自己的视图控制器的选项卡,如何知道已经选中的选项卡何时再次触及?
选项卡1进入已加载其他页面的webview,当用户再次点击主页选项卡时,当它仍然突出显示时,我想重新加载它开始的初始URL。
感谢您的任何想法!
答案 0 :(得分:0)
每次触摸标签栏时都会调用UITabBarControllerDelegate方法[– tabBarController:didSelectViewController:]
。此API的文档说明:
在iOS v3.0及更高版本中,此(选定的视图控制器)可能相同 查看已经选中的控制器。
因此,如果您再次选择了指定的标签,则可以让此委托方法重新加载您的初始网址。
答案 1 :(得分:0)
@interface AHTabBarController () <UITabBarControllerDelegate>
@property (nonatomic, strong) UIViewController* previousViewController;
@end
///
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if ([viewController isEqual:self.previousViewController])
{
NSLog(@"reselect tabbar");
}
self.previousViewController = viewController;
}
答案 2 :(得分:0)
这是常见用例的完整答案。
创建一个 protocol
来处理重选
protocol TabInteractionDelegate {
func didReselectTab(at index: Int, with item: UITabBarItem)
}
从自定义 protocol
调用 UITabBarController
class CustomTabBarController: UITabBarController, UITabBarControllerDelegate {
var tabInteractionDelegate: TabInteractionDelegate?
// ...
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
// This will:
// 1. Call when the tab is reselected (i.e. The tab does not switch)
// 2. NOT get called when the tab is switching to a new tab and showing a new view controller
if (tabBar.items?[selectedIndex] == item) {
tabInteractionDelegate?.didReselectTab(at: selectedIndex, with: item)
}
}
}
在您需要的 UIViewController
中聆听更改
class CustomViewController: UIViewController, TabInteractionDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Attach the delegate ?
if let tabBarCont = tabBarController as? ChoiceTabBarController {
tabBarCont.tabInteractionDelegate = self
}
}
// Listen to the change ?
func didReselectTab(at index: Int, with item: UITabBarItem) {
print("\(index) :: \(item)")
// Here you can grab your scrollview and scroll to top or something else
}
}