【问题标题】:How can i refresh a view every time when a tab bar item is clicked?每次单击标签栏项目时如何刷新视图?
【发布时间】:2011-12-02 02:05:26
【问题描述】:

我正在使用 TabBar 制作应用程序。但是 TabBarController 不是 RootViewController。在选项卡栏中有 4 个选项卡。其中一个选项卡是历史,它与显示历史的表格视图链接。每次单击该视图时,我都想刷新该视图,以便获得更新的表格视图。我怎样才能做到这一点?提前致谢。

【问题讨论】:

    标签: iphone ios cocoa-touch uitabbarcontroller uitabbar


    【解决方案1】:

    下面的代码添加请 ^^

    如果你改变了一个tabBarIndex,同时调用了-(void)viewWillAppear。

    -(void)viewWillAppear:(BOOL)animated
    {
        // force the tableview to load
        [tableView reloadData];
    }
    

    参考 Apple 示例代码:这是关于 UITabBarController 的非常棒的教程 http://developer.apple.com/library/ios/#samplecode/TheElements/Introduction/Intro.html

    没有添加苹果示例代码[super viewWillAppear:animated];

    【讨论】:

    • 事实上我的问题是在哪里调用这个函数?我搜索但找不到当单击标签栏项目时调用该视图的哪个功能。
    • 不工作。当我点击历史选项卡时,它不会进入 viewWillAppear。
    • 不要忘记在方法中添加[super viewWillAppear:animated];
    • - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSLog(@"in viewWillAppear"); //重新加载表视图以指示是否发布了运行 [self.theTableView reloadData]; }
    • 我看不到“in viewWillAppear”的日志。并且 TableView 没有重新加载。我创建了一个按钮,然后单击该按钮,我使用相同的重新加载代码及其工作
    【解决方案2】:

    使用- (void) viewWillAppear:(BOOL)animated 更新您视图中的任何内容。

    - (void) viewWillAppear:(BOOL)animated {
       [super viewWillAppear:animated];
       // You code here to update the view.
    }
    

    每次视图即将显示时都会调用此方法。

    【讨论】:

    • 当我点击历史标签时,它不会进入 HistoryView 的 viewWillAppear。
    • 是的,在使用标签栏和导航控制器时会调用此方法。
    • 我调试了它,我也放了一些日志。相信我,它不会去那里。
    • 抱歉,只是测试一下,它每次都会被调用,你确实将- (void) viewWillAppear:(BOOL)animated 添加到UIViewController而不是UIView
    • 这是我的 .h @interface RunListViewController : UITableViewController 然后在 .mi 中有 -(void)viewWillAppear:(BOOL) 动画,其中我在 [super viewWillAppear 之后编写了这行代码 [tableView reload] :动画];这有什么问题吗?
    【解决方案3】:
    -(void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:YES];
        if ([Globals sharedInstance].isFromFindSimiler)
        {
            [self.view addSubview:_findSimilerView];
            [_historyTableView setFrame:CGRectMake(0, 85, 320, 490)];
    
        }
        else
        {
    
        [self history_webservice];
        }
    }
    

    我已经做到了。在这种情况下,每当历史屏幕上的用户选项卡时,我都会调用 Web 服务以获取历史记录并更新 tableview。

    【讨论】:

      【解决方案4】:

      不要使用(void)ViewDidLoad,而是使用viewWillAppear:(BOOL)animated

      - (void) viewWillAppear:(BOOL)animated {
          [super viewWillAppear:animated];
          //your code 
      }
      

      【讨论】:

        猜你喜欢
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多