UISegmentController已添加到单元格中

时间:2011-12-29 15:31:22

标签: iphone objective-c

我有一个tableView,并且我有一个UISegmentController。所以每个单元格都有一个UISegmentController。

当用户点击UISegmentController(给定单元格)中的Segment时,我如何知道单击了哪个单元格?我需要NSLog该单元格的标题,我该怎么做(注意:用户只会点击单元格的UISegmentController ,而不是它自己的单元格)

以下代码是单击UISegmentController时将调用的方法;

-(void)segmentOfCellPressed:(id)sender{

}

3 个答案:

答案 0 :(得分:2)

试试这个:

-(void)segmentOfCellPressed:(id)sender{
    UISegmentController *segmentController = (UISegmentController *)sender;

    YourCellClass *cell=(YourCellClass *)segmentController.superview.superview;  // your clicked cell
 // or a little bit more verbose but imho easier to understand:
 // UIView *contentView = [segmentController superview];
 // YourCellClass *cell = (YourCellClass *)[contentView superview];

    NSIndexPath *path = [yourTableView indexPathForCell:cell]; //indexPath of clicked cell

}

答案 1 :(得分:1)

应该很容易。 UISegmentedController派生自UIControl,它派生出UIView。 UIView对象具有标记属性。创建每个UISegmentedControler时,请为每个UISegmentedControler指定唯一的标记值。您可能需要在字典中单独管理哪些标记值。

-(void)segmentOfCellPressed:(id)sender
{
   UISegmentedController *segmentedController = (UISegmentedController *)sender;
   UITableViewCell *cell = [self cellFromTag:segmentedController.tag];  
}

您需要创建一个名为cellFromTag的方法,该方法将从UISegmentedController的标记值返回单元格。如果您不想要单元格而是其他东西,那么您可以返回它。

答案 2 :(得分:1)

您可以将段控制器的tag属性设置为cellForRowAtIndexPath中单元格的索引,然后在选择器中查询段控制器,然后通过标记获取单元格:

UISegmentController *segmentController = (UISegmentController*)sender;
int row = segmentController.tag;

希望这有帮助。

在cellForRowAtIndexPath方法中,将UISegmentController添加到单元格中,执行以下操作:

segment.tag = indexPath.row;