我想在UITableView
的第一行中添加一些特殊效果,但是当我向下滚动表格视图时,它还带有其他单元格(因为单元格可重用性?)。那么有什么方法可以阻止任何特定的单元重用?我尝试将nil
作为第一个单元格的reusableIndentifier传递,但它给了我错误(插入失败)。
我在viewDidApper
方法中为第一行的某些动画调用此方法 -
-(void)openSubmenuForFirstRow{
stIndex = 0;
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];
StoreCell* sCell = (StoreCell *)cell;
UIView* mainView = [sCell viewWithTag:101];
UIView* subView = [sCell viewWithTag:102];
[UIView animateWithDuration:0.3 animations:^{
CGRect rect = subView.frame;
rect.origin.x = 0;
subView.frame = rect;
CGRect mainViewRect = mainView.frame;
mainViewRect.origin.x = 117;
mainView.frame = mainViewRect;
}];
}
但是当我滚动表视图时,我在其他几个单元格上得到了这个动画。 任何帮助或建议将不胜感激。
答案 0 :(得分:2)
您可以使用两个单元格CellIdentifires。一个是第一行,第二个是第二行。检查indexPath.row。如果为0,则使用cellidentifier1,否则使用cellidentifier2。
将它用于第一行:
UITableViewCell* cell;
if(indexPath.row == 0){
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell1"];
}
else{
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2"];
}
if (cell == nil) {
if(indexPath.row == 0){
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell1"];
}
else{
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell2"];
}
}
答案 1 :(得分:0)
只有在显示第一个单元格时才能显示菜单。从viewDidAppear
移除呼叫并添加此方法:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
[self openSubmenuForCell: cell];
}
}
您还需要更改方法,如下所示:
- (void)openSubmenuForCell: (UITableViewCell*)cell {
stIndex = 0;
StoreCell* sCell = (StoreCell *)cell;
UIView* mainView = [sCell viewWithTag:101];
UIView* subView = [sCell viewWithTag:102];
[UIView animateWithDuration:0.3 animations:^{
CGRect rect = subView.frame;
rect.origin.x = 0;
subView.frame = rect;
CGRect mainViewRect = mainView.frame;
mainViewRect.origin.x = 117;
mainView.frame = mainViewRect;
}];
}
答案 2 :(得分:0)
将此代码用于寄存器单元格:
NSString *CellIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil] objectAtIndex:0];
}
并且objectAtIndex是您的自定义单元格标记。