我有正被重新裝入新的內容被添加的tableview,使用[tableview reloadData];
重裝的tableview和觸摸手勢
麻煩是我有一個UILongPressGestureRecognizer上在表TableCells並且由於細胞/表正在相當重新加載經常LongPress並不總是有時間工作,我猜測它的內部定時器在重新加載單元格/表格時正在重置。
我有正被重新裝入新的內容被添加的tableview,使用[tableview reloadData];
重裝的tableview和觸摸手勢
麻煩是我有一個UILongPressGestureRecognizer上在表TableCells並且由於細胞/表正在相當重新加載經常LongPress並不總是有時間工作,我猜測它的內部定時器在重新加載單元格/表格時正在重置。
您是否在[tableView reloadData]
被調用之前試過看過您的UILongPressGestureRecognizer
s的狀態?例如:
// Returns |YES| if a gesture recognizer began detecting a long tap gesture
- (BOOL)longTapPossible {
BOOL possible = NO;
UIGestureRecognizer *gestureRecognizer = nil;
NSArray *visibleIndexPaths = [tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in visibleIndexPaths) {
// I suppose you have only one UILongPressGestureRecognizer per cell
gestureRecognizer = [[tableView cellForRowAtIndexPath:indexPath] gestureRecognizers]
lastObject];
possible = (gestureRecognizer.state == UIGestureRecognizerStateBegan ||
gestureRecognizer.state == UIGestureRecognizerStateChanged);
if (possible) {
break;
}
}
return possible;
}
// ... later, where you reload the tableView:
if ([self longTapPossible] == NO) {
[tableView reloadData];
}
讓我知道它是否有效!
+1用於暗示檢查'UIGestureRecognizer.state' – Till 2011-07-02 01:15:03
,如果你想現有的細胞仍然不要使用reloadData
。相反,當您獲取新數據時,請使用Inserting and Deleting Cells的方法通知表格視圖確切地指出哪些單元格已更改。一般程序是:
beginUpdates
deleteRowsAtIndexPaths:withRowAnimation:
刪除在新數據中已刪除的舊項目的單元格。insertRowsAtIndexPaths:withRowAnimation:
爲已添加到新數據中的任何項目添加新單元格。reloadRowsAtIndexPaths:withRowAnimation:
。commitUpdates
。此時,您的方法必須反映新數據(例如,tableView:numberOfRowsInSection:
應反映更改的計數,而tableView:cellForRowAtIndexPath:
應使用新項目)。我曾嘗試過這種技術,並發現reloadData方法對我的系統來說要好得多。有沒有辦法檢測用戶是否將手指放在設備上? – daidai 2011-06-28 00:54:28
更新的頻率是多少? – 2011-06-15 07:19:10
細胞正在發生什麼樣的變化?整個表格是否改變,或者當時只有一個單元格? – EmilioPelaez 2011-06-15 07:27:40
更新經常發生。 – daidai 2011-06-15 07:31:51