4

我在使用UITableView的項目中添加了UIRefreshControl的功能。該應用程序通過從Web服務提取條目到tableview來工作。下面是我用來添加UIRefreshControl代碼:UITableView 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]; 
} 

現在,如果我拉刷新,它刷新通過添加新條目,如果有任何和顯示我在的tableview的頂部以下觀點:

enter image description here

除了第一次啓動或打開應用程序時,一切都很好,它不顯示我已經在上圖中顯示的視圖,儘管它刷新了tableview。我希望它每次刷新時都顯示刷新控制視圖。任何人都可以指出我做錯了什麼?謝謝!

UPDATE:我已經添加了[self refreshControl beginRefreshing],並且UIRefreshControl的微調控件視圖現在正在顯示,但它的上方是第一個tableview的條目。任何人都可以指出如何糾正它?

+0

的可能重複的[UIRefreshControl - beginRefreshing時的UITableViewController是內部的UINavigationController不工作] (http://stackoverflow.com/questions/14718850/uirefreshcontrol-beginrefreshing-not-working-when-uitableviewcontroller-is-ins) – JosephH

回答

1

我會將您的[self pullToRefresh]調用移動到viewWillAppear而不是viewDidLoad。

+0

我添加了[self pullToRefresh] vie會出現,但看到輸出沒有差異。還有什麼我可以做的? – AJ112

+0

你能張貼你看到的圖片嗎?通過這個重新閱讀我只是想確保我完全理解這個問題。 – Dan

+0

當應用程序啓動時,TableView會使用新數據進行刷新,但微調控件不會自行顯示。但是,如果我做拉手動刷新,然後顯示。希望清除任何混淆 – AJ112

0

有可以做補充UIRefreshControl在你的tableview都沒有在你的代碼添加

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

要麼加1或2,如果你的類的UIViewController

的子類

如果兩件事情你的類的UITableViewController的子類,然後嘗試更換

self.refreshControl = refreshControl; with 2 line 
+0

我的類是UITableViewController的子類,所以你說我必須用[self.tableView addSubview:tableRefreshControl]替換self.refreshControl = refreshControl;但是什麼是tableRefreshControl?它不承認它,因爲它宣佈不在哪裏,也沒有內置的東西。你能更精確嗎?謝謝! – AJ112

12

這個問題已經真正困擾了我while.I發現,4英寸iOS設備不必這個問題,但3.5英寸的設備呢。

我試圖找出第一次刷新控制beginRefreshing本身和當我操作拉手勢時的差異。這是拉操作。

而且我查了蘋果公司的文件上UIRefreshControl.It說:The control does not initiate the refresh operation directly. Instead, it sends the UIControlEventValueChanged event when a refresh operation should occur.

所以我想也許我可以添加一些模擬拉手勢來觸發refreshControl的表現。

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

它的工作原理!

PS。 UIRefreshControl也適用於UIScrollView。 [yourScrollView addSubview:yourRefreshControl]只是工作。

[refreshControl beginRefresh]

插入的代碼::代碼之前

+0

從你的答案看,你可以解決這個問題。我試過你的代碼,但它不適合我。我用這個[self.tableView setContentOffset:CGPointMake(0.0f,60.0f) animated:YES]; [self.refreshControl beginRefreshing]; – AJ112

+0

現在,tableview的第一個單元幾乎在導航欄後面。你能告訴我如何解決它嗎? – AJ112

+0

Hi @ AJ112,我的代碼是'-60.0f',而不是'60.0f'。 ' - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated'是爲了設置__offset__,所以這裏的偏移量應該是負的以模擬__pull down__手勢,如果設置爲正值,則內容的頂部將在外部的窗戶。 – satgi

0

[refreshControl layoutIfNeeded]

相關問題