从回收的UITableViewCell中删除强属性

时间:2014-02-06 14:21:12

标签: ios uitableview

我在viewcontroller中声明了一个名为:

的属性
@property (nonatomic, strong) UISegmentedViewController *segmentedControl;

我有一个tableview,我将segmentedControl添加到第一个单元格中:

self.segmentedControl.frame = CGRectMake(10, 10, cell.frame.size.width - 20, 30);
self.segmentedControl.selectedSegmentIndex = self.segment;

[cell addSubview:self.segmentedControl];

我只想在第一个视图中使用此控件,当然,它会在我将单元格出列时进行回收。如何从后续单元格中删除segmentedControl?我无法调用[self.segmentedControl removeFromSuperView],因为这将从第一个单元格中删除它。

注意:我必须将其声明为属性,以便我可以从委托方法中引用它。

3 个答案:

答案 0 :(得分:3)

最好的办法是不要通过删除/添加来移动您的控件。但要把它放在一个静态的单元格中。

这很容易实现。只需声明你的细胞:

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:... reuseIdentifier:nil
self.segmentedControl.frame = CGRectMake(10, 10, cell.frame.size.width - 20, 30);
self.segmentedControl.selectedSegmentIndex = self.segment;

[cell addSubview:self.segmentedControl];

重要的是将nil设置为reuseIdentifier。

因此细胞不会被回收。 此外,您可以建立与细胞的强大联系......

答案 1 :(得分:2)

你可以制作两种原型单元格,然后根据indexPath加载你需要的单元格,或者为第一个单元格设置cell.segmentedControl.hidden属性为NO,并YES 1}}用于tableView:cellForRowAtIndexPath:方法中的其余部分。

答案 2 :(得分:0)

if (indexPath.row == 0)
  [cell addSubview:self.segmentedControl];

else if(segmentedControl.superView!=nil)
  [self.segmentedControl removeFromSuperView]