0

我正在编写一个 iOS 应用程序,它为一组显示我网站内容的 WebViews 提供本机选项卡式界面。UITabBarDelegate我想重新点击相同的选项卡来刷新页面,所以我在我的 ViewController 中实现了(单词选择?我是一个 Java 人......)并且有这个:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    AbstractPageController *otherController = (AbstractPageController *)[[self viewControllers] objectAtIndex:[[tabBar items] indexOfObject:item]];
    [otherController loadPage];
}

在适当的 WebView 中加载页面。

而且,当然,首先(在启动时)加载页面,我在我的AbstractPageController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self loadPage];
}

正如您可能想象的那样,如果选择了新选项卡,这会导致页面被加载两次。我该如何避免这种情况?现在我认为最好的办法是从 中删除loadPage调用viewDidLoad,但这意味着在启动时页面没有被加载(对吗?)。特例似乎很hacky。你有什么建议吗?

4

2 回答 2

0

我决定最干净的方法是tabBardidSelectItem只在重新点击相同的选项卡时才做任何工作。因此:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    NSUInteger newIndex = [[tabBar items] indexOfObject:item];

    if (newIndex == [self selectedIndex])
        //etc
}

效果很好,而且不觉得hacky!

于 2013-06-11T16:23:08.233 回答
-1

我相信如果您调用方法 -loadView 而不是您自己的实例方法,视图将在呈现时保持加载,并且不会发生重复加载。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html

于 2013-06-11T16:02:02.320 回答