5

UITableView を使用するプロジェクトに UIRefreshControl の機能を追加しました。このアプリは、Web サービスからテーブルビューにエントリをフェッチすることによって機能します。以下は、UIRefreshControl を追加するために使用したコードです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.tintColor = [UIColor grayColor];
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating New Entries"];
    [refreshControl addTarget:self action:@selector(pullToRefresh) forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;

    [self pullToRefresh];    
}

- (void) pullToRefresh
{
    counter = 1;
    [self fetchEntriesNew:counter]; // My code for updating table view

    [self performSelector:@selector(updateTable) withObject:nil afterDelay:2];
}

- (void)updateTable
{
    [self.tableView reloadData];
    [self.refreshControl endRefreshing];
}

プルして更新すると、新しいエントリがあれば追加して更新され、テーブルビューの上に次のビューが表示されます。

ここに画像の説明を入力

アプリを初めて起動または開いたときを除いて、すべてがうまく機能します。テーブルビューは更新されますが、上の画像で示したビューは表示されません。リフレッシュするたびにリフレッシュコントロールビューを表示したい。誰かが私が間違っていることを指摘できますか? ありがとう!

更新: [self refreshControl beginRefreshing] を追加し、UIRefreshControl のスピナー ビューが表示されるようになりましたが、テーブルビューの最初のエントリの上にあります。誰でもそれを修正する方法を指摘できますか?

4

4 に答える 4

12

This problem had really puzzled me for a while.I found that 4-inch iOS devices don't have this problem, but 3.5-inch devices do.

I tried to find out the differences between the first time that the refreshControl beginRefreshing itself and when I operated a pull gesture.It's the pull operation.

And I checked Apple's document on UIRefreshControl.It says The control does not initiate the refresh operation directly. Instead, it sends the UIControlEventValueChanged event when a refresh operation should occur.

So I thought maybe I could add something to simulate a pull gesture to trigger refreshControl's showing.

[yourScrollView(or tableView) setContentOffset:CGPointMake(0.0f, -60.0f)
                                      animated:YES];
[yourRefreshControl beginRefreshing];

It works!

PS. UIRefreshControl works with UIScrollView, too. [yourScrollView addSubview:yourRefreshControl] just works.

于 2013-10-19T04:38:51.837 に答える
1

[self pullToRefresh] 呼び出しを viewDidLoad ではなく viewWillAppear に移動します。

于 2013-06-19T13:55:17.530 に答える
1

テーブルビューに UIRefreshControl を追加するために実行できることが 2 つあります。どちらもコードに追加されません。

1. [self setRefreshControl:tableRefreshControl];
2. [self.m_TableView addSubview:tableRefreshControl];

クラスが UIViewController のサブクラスである場合は、1 または 2 を追加します

クラスが UITableViewController のサブクラスである場合は、置き換えてみてください

self.refreshControl = refreshControl; with 2 line
于 2013-06-19T14:29:23.950 に答える