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:方法を使用してアイテムを「リセット」するだけです。その時を除いて、loadingview を self.refreshButton に変更します。

4

2 に答える 2

2

ツールバーとその項目にアクセスするために、いくつかの ivar を定義します。

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 に答える