如何使用UISegmentedControl控制UITableView单元格?

时间:2013-01-04 13:36:07

标签: objective-c cocoa-touch uitableview ios6 uisegmentedcontrol

我已经成功设置了Tab Bar控制器。第一个视图中的表视图和第二个选项卡中的简单UIView。 UIView有它自己的类。我已经为后者添加了分段控件,最终我想根据选择的段来更改表格视图单元格中使用的图像。

单元格图像是数组的一部分,并且已使用自定义单元格进行设置。

我在UIView类中设置了分段控件,添加了@property和@syntesize,但我不知道如何从UIView类中更改单元格图像。

提前致谢!

我的UIView.h中的段控件定义如下

@property(弱,非原子)IBOutlet UISegmentedControl * selectedSegment

我还没有包含IBAction,因为我不是100%需要去的地方或者如何写。

在我的表格视图中,我的单元格图像当前在cellForRowAtIndexPath

中定义
cell.itemImageView.image = [UIImage imageNamed:[icons objectAtIndex:indexPath.row]];

我的想法是在单元格方法中放置一个switch语句,每个case指向一个不同的图标集,所以

switch (something)
{
    case 0:
    cell.itemImageView.image = [UIImage imageNamed:[iconSetOne objectAtIndex:indexPath.row]];
    break;

    case 1:
    cell.itemImageView.image = [UIImage imageNamed:[iconSetTwo objectAtIndex:indexPath.row]];
    break;

    default
    break;
}

但我很确定这样做的方法是错误的,而“某些东西”就是我所坚持的。

1 个答案:

答案 0 :(得分:1)

1)在您拥有分段控件的简单UIView中:

  • 定义连接到表格视图控制器的插座_tableViewController
  • 定义响应被触发的分段控件的操作方法segmentedControlChanged:

2)在表视图控制器中:

  • 定义selectedSegmentIndex
  • 类型的属性NSInteger

3)现在添加action方法的实现:

- (void) segmentedControlChanged:(id)sender
{
  UISegmentedControl* segmentedControl = (UISegmentedControl*)sender;
  _tableViewController.selectedSegmentIndex = segmentedControl.selectedSegmentIndex;
  [_tableViewController.tableView reloadData];
}

4)在表格视图控制器中,您现在可以将建议的switch语句添加到tableView:cellForRowAtIndexPath:

switch (self.selectedSegmentIndex)
{
  [...]
}

请注意,在步骤3中调用reloadData是强制表视图使用正确的图像更新所有单元格的粗略方法。 UITableView中还有其他方法可以让您更精细地控制要更新的单元格(例如reloadSections:withRowAnimation:)。