这是我的情景:
我在UITableViewController
中显示UINavigationController
,我在子类中自己绘制单元格。为了使细胞看起来像原生细胞一样接近可能,我有一个标志,指示它是否处于过渡状态,以防止当用户从堆栈向上移回时文本颜色明显闪烁表视图的详细视图。
目前,我在-tableView:didSelectRowAtIndexPath:
设置转换标记,如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// (stuff for pushing the detail view on to the navigation stack)
((MyCustomTableViewCell *) [self.tableView cellForRowAtIndexPath: indexPath]).transitioning = YES;
}
这很有效,但有一点需要注意:在列表动画显示屏幕之前,任何寻找它的人都可以清楚地看到过渡,因为单元格文本从白色(蓝色)变为黑色(蓝色)。
我的问题:有没有办法从表格视图中获取当前选定的单元格,在之后它已在屏幕外转换,并向其发送消息? (假设它没有被解除分配,只需卸载)
或者我只是以错误的方式处理这一切?
(对于任何考虑说没有人会注意到它的人,请记住,我可以接受它的方式,我只是想知道是否有办法让我做得更好。好的iOS应用程序都是关于小事。)
答案 0 :(得分:1)
“防止文字颜色明显闪烁”是什么意思?默认情况下,iOS表格单元格似乎不会这样做,至少是以令人不快的方式。也许你可以重新访问你的UITableViewCell实现,并确定你是否正确处理-setSelected:animated:和-setHighlighted:animated
答案 1 :(得分:0)
UITableView没有保留表格中所有单元格的可公开访问列表 为了访问所有单元格(包括屏幕外的单元格),您需要维护一个单独的单元格数组。
@interface MyViewController : UIViewController
{
NSMutableArray* tableCells;
}
@implementation MyViewController
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableCells == nil)
tableCells = [[NSMutableArray alloc] init];
UITableViewCell* cell;
if (indexPath.row < [tableCells count])
{
// Return a cell from the cached list
cell = (UITableViewCell*)[tableCells objectAtIndex:indexPath.row];
}
else
{
// Create a new cell
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"];
// Customize and fill the cell with content anyway you wish
// ...
}
return cell;
}
现在您已拥有表格中所有单元格的列表,您可以随时向他们发送任何消息。