2012-02-27 15 views
0

我有一個UITableViewUITableViewCell s swipble。當一個單元格被刷過時,我想要在該單元格下面顯示(顯示)一個視圖。下面是我的代碼:insertSubview:belowSubview:在UITableViews

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

_cellBack = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)]; 
_cellBack.backgroundColor = [UIColor whiteColor]; 
[self.tableView insertSubview:_cellBack belowSubview:cell]; 

for (int i = 0; i < [self.tableView subviews].count; i++) { 
    UIView *v = [[self.tableView subviews] objectAtIndex:i]; 

    if ([v isEqual:_cellBack]) { 
     NSLog(@"cellBack %d", i); 
    } 
    if ([v isEqual:cell]) { 
     NSLog(@"cell %d", i); 
    } 
} 

for環,我請檢查的意見指標是如我所料,確實他們是; _cellBack的索引值小於cell的索引值。

當我更換insertSubview:belowSubview:呼叫與insertSubview:aboveSubview:,它工作正常(雖然白UIView展示了刷卡細胞以上),所以它不是不正常分配_cellBack的問題。我也試過insertSubview:atIndex:,那也沒用。

什麼可能導致這種情況?

謝謝!

+0

你是不是想A)下面插入新的視圖(例如下面)指定的細胞,使你的新觀點和表格單元格都在上面疊放另一個;或者你想要B)爲你的表插入一個新行,這樣如果表在你的代碼運行後在開始時有三個單元格,它會有四個? – jonkroll 2012-02-27 03:59:02

+0

我正試圖在單元格下面添加它。這不是我添加的新行。 – donkim 2012-02-27 04:07:04

+0

因此,您可能會成功添加子視圖,但由於它與表格單元具有相同的大小和相同的位置,因此您無法看到它,因爲表格單元位於其上並完全隱藏了它? – jonkroll 2012-02-27 04:12:50

回答

0

所以事實證明,如果我把它添加到另一個視圖,代碼工作正常。

這裏就是我說的:

_cellBack = [[UIView alloc] initWithFrame:CGRectMake(0, cell.contentView.frame.origin.y, cell.frame.size.width, cell.frame.size.height)]; 
    _cellBack.backgroundColor = [UIColor whiteColor]; 

    [cell insertSubview:_cellBack belowSubview:cell.contentView]; 

我仍然不知道爲什麼在問題的代碼無法正常工作。從this github accountSideSwipeTableView有類似於我以前的代碼,它工作正常。

1

UITableView已經有能力把東西放在細胞後面。這是電池的backgroundView。你爲什麼不嘗試,與其這樣,你會做到以下幾點:

cell.selectedBackgroundView = _cellBack; 
2

爲了使SideSwipeTableView例如工作在ios7 &以前,簡單地改變行

[cell.superview insertSubview:self.sideSwipeView belowSubview:cell]; 

別的推在電池的頂部的後視圖,你沒有得到任何動畫效果,動畫發生在你的背景細胞後面!要檢查這個單元格的偏移量是否小於全屏,以檢查您的單元格是否仍然位於頂部和背景之上,那麼它確實在下面。來源:

cell.frame = CGRectMake(direction == UISwipeGestureRecognizerDirectionRight ? cellFrame.size.width : -cellFrame.size.width, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height); 

cell.frame = CGRectMake(direction == UISwipeGestureRecognizerDirectionRight ? cellFrame.size.width/2 : -cellFrame.size.width/2, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height);