如何阻止 UITableView 单元格在视图更改时消失
Posted
技术标签:
【中文标题】如何阻止 UITableView 单元格在视图更改时消失【英文标题】:How to stop UITableView Cells from disappearing on view change 【发布时间】:2015-02-26 17:43:24 【问题描述】:我在使用addSubView
更改容器视图的视图时遇到了一个奇怪的错误,UITableView 的内容消失了。
这个 UITableView 是动态的,我从数组中设置单元格。目前没有使用数组的内容,它只是计算数组的长度并生成该数量的单元格。
从start of this video 可以看出,表格视图在第一个视图上加载良好。但是当我将容器视图的内容更改为另一个视图然后再返回时,单元格似乎加载了,然后消失了!
我正在使用自定义 Segue 使用以下代码更改菜单按钮点击的视图
-(void) perform
HomeViewController *src = (HomeViewController *)[self sourceViewController];
UIViewController *dst = (UIViewController *)[self destinationViewController];
//Clear view of all subviews
for (UIView *view in src.placeholderView.subviews)
[view removeFromSuperview];
//save destination
src.currentViewController = dst;
//set placeholderOutlet to destination
[src.placeholderView addSubview:dst.view];
UITableViewController 内的代码如下。
- (void)viewDidLoad
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
NSMutableArray *thisBlocks = [NSMutableArray arrayWithCapacity:7];
Blocks *block = [[Blocks alloc] init];
block.ID = @"232323";
block.Name = @"128 Some Road";
[thisBlocks addObject:block];
block = [[Blocks alloc] init];
block.ID = @"140332";
block.Name = @"12 Another Road";
[thisBlocks addObject:block];
block = [[Blocks alloc] init];
block.ID = @"889752";
block.Name = @"Quadrant Square";
[thisBlocks addObject:block];
block = [[Blocks alloc] init];
block.ID = @"1403323";
block.Name = @"12 Some Road";
[thisBlocks addObject:block];
block = [[Blocks alloc] init];
block.ID = @"8897522";
block.Name = @"Quadrant Square";
[thisBlocks addObject:block];
block = [[Blocks alloc] init];
block.ID = @"1403392";
block.Name = @"12 Another Road";
[thisBlocks addObject:block];
block = [[Blocks alloc] init];
block.ID = @"8897520";
block.Name = @"Quadrant Square";
[thisBlocks addObject:block];
self.blocks = thisBlocks;
//NSLog(@"array: %@", self.blocks);
//NSLog(@"Rows : %lu", (unsigned long)[self.blocks count] );
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
// Return the number of sections.
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
// Return the number of rows in the section.
return [self.blocks count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BlockCell"];
return cell;
这真的让我很难过。有什么想法吗?
【问题讨论】:
您的表视图控制器是否正在被释放(实现 dealloc 并在其中放置日志以查看它是否被调用)? 只是猜测:当您返回 tableview 时,您的“perform”方法是否执行?这样 tableview 将被加载、填充然后“执行”通过它的子视图 ([view removeFromSuperview];) 快速枚举破坏你所有的辛勤工作,以便删除 tableview? 我认为 rdelmar 拥有它。我让我的 ViewController 设置了一个(weak, nonatomic)
。将其更改为 `(strong, nonatomic) 解决了这个问题。谢谢
【参考方案1】:
rdelmar 拥有它。我让我的 ViewController 设置了一个(弱的,非原子的)。将其更改为 `(strong, nonatomic) 解决了这个问题。谢谢 – Glenn Flanagan 43 秒前编辑
【讨论】:
以上是关于如何阻止 UITableView 单元格在视图更改时消失的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的单元格在我的 UITableView 中显示为空白?
用于 UITableView 的自定义 XIB 单元格在滚动时卡住/卡住