2013-03-04 42 views
2

今天剛開始使用「UIRefreshControl」,並注意到一些奇怪的事情。UIRefreshControl奇怪

如果我在InterfaceBuilder中創建了UIRefreshControl,並將它連接起來,我的選擇器永遠不會被調用。 IB表示,控件應該觸發「值已更改」的消息,並且應該調用我的代碼,但從未這樣做。

所以我放棄了在Interface Builder中這樣做,並決定在代碼中這樣做。沒有太多的線。所以我把這個代碼我的「viewDidLoad中」例行的內部:

self.refreshControl = [UIRefreshControl new]; 
[self.refreshControl addTarget:self action:@selector(doStuff:) forControlEvents:UIControlEventValueChanged]; 
NSMutableParagraphStyle* paragraphStyle = [NSMutableParagraphStyle new]; 
paragraphStyle.alignment = NSTextAlignmentCenter; 
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to refresh" attributes:@{NSParagraphStyleAttributeName : paragraphStyle}]; 

它繪製精細,但刷新控制是可見的觀點首次出現。我更希望在用戶真正把桌子拉下來之前它不可見。我正在調用一個web服務,並等待結果回來,然後填充表格。所以,你只能看到控制一兩秒。但它看起來很奇怪。

所以,問題是:
1.這是一個已知的錯誤,你不能單獨從Interface Builder連接控件嗎?
2.有沒有辦法將這個控件添加到表視圖控制器,直到用戶真的想看到它?

回答

1

您不需要添加刷新控件,或者在您的viewController中聲明一個。添加拉到刷新是一個兩步過程。
步驟1:在故事板中,轉到您的tableViewController,在其中顯示「刷新」的地方,選擇「啓用」。
步驟2:將以下代碼添加到您的tableViewController.m文件,在viewDidLoad中:

[self.refreshControl addTarget:self 
          action:@selector(refresh) 
        forControlEvents:UIControlEventValueChanged]; 

這是整個過程,比你-refresh方法做的東西等。沒有更多的了。

0

是的,UIRefreshControl存在一個錯誤,該操作從未被調用過。基思·哈里森這個會談在他的博客條目UIRefreshControl Fun and Games

與調試調查似乎刷新方法 從來沒有所謂。我只能假設由於某種原因故事板是 沒有正確地將UIRefreshControl連接到我們的動作,或者是 與 UIControlEventValueChanged事件有一些其他奇怪的交互。我已經向Apple (rdar://14178445)提交了一個錯誤報告,但也可以使用一個簡單的解決方法。

解決方法如@AMayes所述。

+1

我有這個錯誤,當我的視圖控制器有「自由大小」= 1000px。當我將其更改回固定時,刷新開始正常工作。 – oyatek 2014-07-07 13:12:05

+0

刪除故事板中的「自由大小」是最終解決它的!謝謝! – 2017-09-21 00:14:20