0

我有一个刷新按钮,它执行一个函数来发起请求并接收响应。在解析响应时,我正在更改我上次更新的文本,以让用户了解正在发生的事情。我希望在“程序”运行时让刷新按钮成为 uiactivityindicator。我怎样才能做到这一点?这是我的故事板的屏幕截图,可帮助您了解设置。让我知道我是否可以提供其他任何东西。谢谢!

故事板图像

下图显示了我如何通过右侧的模拟指标下拉列表创建底栏。

底部工具栏

编辑:

这是我从标记答案中使用的更改代码。

// Create UIActivityIndicator UIBarButtonItem
UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[activityView startAnimating];
UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:activityView];

// Toolbar with LoadingView and LastUpdatedTitle with Flex Spacing
[self.navigationController.toolbar setItems:(NSArray *)[NSArray arrayWithObjects: loadingView, self.flexSpaceOne, self.lastUpdated, self.flexSpaceTwo, nil]];

当我想将它改回来时,我只需使用相同的setItems:arrayWithObjets:方法“重置”我的项目。除了那个时候我会用 self.refreshButton 改变加载视图。

4

2 回答 2

2

定义一些 ivars 以访问您的工具栏及其项目:

NSMutableArray *toolbarItems;
IBOutlet UIToolbar *toolbar;

然后,在你开始任务的方法中,

UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:activityView];
[toolbarItems replaceObjectAtIndex:0 withObject:loadingView];
toolbar.items = toolbarItems;

然后在完成后执行相反的操作以再次添加刷新按钮。

于 2012-07-09T00:26:44.913 回答
0

这是使用块并启动另一个线程的好时机。

- (IBAction)refresh:(id)sender
{
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [spinner startAnimating];
    self.navigationItem.rightBarButtonItem = [[BarButtonItem alloc] initWithCustomView:spinner]; 
    dispatch_queue_t request = dispatch_queue_create("request data", NULL);
        dispatch_async(request, ^{
            // call the method to request data
            dispatch_async(dispatch_get_main_queue(), ^{
                self.navigationItem.rightBarButtonItem = sender;
                // populate the table with the data
        });
    });
    dispatch_release(request);
}

你会注意到(当然)我没有把微调器放在你想要的地方。那是因为我对如何访问工具栏项目没有信心——但希望这会让你走上正确的轨道。

于 2012-07-09T00:30:15.340 回答