2009-08-23 40 views
5

我有一個UITableViewController的子類。我有代碼,可以添加/刪除UISearchBar到/從我tableView的tableHeaderView。這是我必須執行這些任務的代碼:動畫添加/從UITableView中刪除UISearchBar tableViewHeader

self.tableView.tableHeaderView = uiSearchBar; //Make the search bar appear 
self.tableView.tableHeaderView = nil; //Make the search bar disappear 

的問題是,我想添加/中的UISearchBar的去除是動畫;當我添加它時,從頂部滑入視圖,然後向上滑動並從視圖中滑出,而不是僅顯示和消失。有什麼建議麼?

謝謝。

回答

7

我終於明白了這一點。結果很簡單。不用將UISearchBar添加到表頭中,而是使用動畫UITableViewRowAnimationTop將其插入到表格的第一個單元格中,並使用相同的方法將其刪除。這導致酒吧滑入和滑出頂部。下面是使酒吧的代碼出現:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
[self.baseUiTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop]; 
[self.baseUiTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

這裏是刪除搜索欄的代碼:

[uiSearchBar resignFirstResponder]; 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
[self.baseUiTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop]; 
+0

此方法對處理單元格交互時選擇的行索引有任何影響嗎? – 2012-05-12 15:44:49

0

試着讓你的表視圖滾動動畫,因此只有在搜索欄下方的行是可見的,則刪除搜索欄和滾動到同一行沒有動畫。

4

一個更簡單的方式,也適合UITableViewStyleGrouped(加不需要改變的行數)的動畫表的contentInset

CGFloat h = uiSearchBar.bounds.size.height; 
UITableView *tv = self.tableView; 
if (tv.tableHeaderView) 
{ // hide bar 
    [UIView animateWithDuration:0.3 animations:^{ 
     tv.contentInset = UIEdgeInsetsMake(-h, 0, 0, 0); 
    } completion:^(BOOL finished) { 
     tv.contentInset = UIEdgeInsetsZero; 
     tv.tableHeaderView = nil; 
     [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
    }]; 
} 
else 
{ // show bar 
    uiSearchBar.frame = CGRectMake(0, -h, tv.frame.size.width, h); 
    [UIView animateWithDuration:0.3 animations:^{ 
     [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
     tv.tableHeaderView = uiSearchBar; 
    }]; 
} 

我知道這是三年後OP問的問題,但由於這是股份公司爲了達到預期的效果,我認爲這可能對其他人遇到同樣問題有用。

+1

發現錯誤...或者我錯了嗎? 'tv.size.width'必須是'tv.frame.size.width',也許'tv.size.height'需要減少到例如44.0f或者h。 – microspino 2012-06-01 16:38:02

+0

確實! +1發現此問題。謝謝。我已經在上面的代碼中解決了這個問題。 – 2012-06-02 08:24:09

+0

這對我來說非常合適,但是我試圖讓我的頭部瞭解這個工程的「顯示」部分。爲什麼它會使框架變成動畫?是因爲當你添加欄到tableview時,它會將欄的框架原點y設置爲0,這會導致它從-h向下移動? – Marcin 2012-07-24 23:21:44