Ios 使用dequeueReusableCellWithIdentifier时分配UItableView单元格标记

Ios 使用dequeueReusableCellWithIdentifier时分配UItableView单元格标记,ios,uitableview,uistoryboard,Ios,Uitableview,Uistoryboard,我在故事板中定义了三个原型单元,每个单元中都包含一个UISegmentedControl小部件。我向用户提供两种类型的标准;一个是[ON | OFF]另一个是[1 | 2 | 3 | 4]。我需要以编程方式设置每个小部件的文本,因此我正在故事板中设置小部件标记,以便使用[cell view with Tag:XX]从正确的原型单元获取小部件。问题是,我所有的UISegmentedControl小部件都连接到同一个侦听器,我无法判断用户正在打开或关闭哪些条件。我已经看到标记值设置为cellforr

我在故事板中定义了三个原型单元,每个单元中都包含一个
UISegmentedControl
小部件。我向用户提供两种类型的标准;一个是
[ON | OFF]
另一个是
[1 | 2 | 3 | 4]
。我需要以编程方式设置每个小部件的文本,因此我正在故事板中设置小部件
标记
,以便使用
[cell view with Tag:XX]
从正确的原型单元获取小部件。问题是,我所有的
UISegmentedControl
小部件都连接到同一个侦听器,我无法判断用户正在打开或关闭哪些条件。我已经看到
标记
值设置为
cellforrowatinexpath
中的行号,但我已经在脚本中使用了
标记
。我如何知道在我的侦听器中正在与哪一行进行交互

更新:代码剪报添加

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   UITableViewCell *retcell;
   NSInteger thisrow = indexPath.row;

   // retrieve the items which should be printed for this
   // row. set text on widget depending on item type
   OBJ_Items *items = [mCriteria objectForKey:thisrow];

   if ([items.Type isEqualToString:YESNO])
   {
      retcell = [tableView dequeueReusableCellWithIdentifier:@"yesno"];

      // get a handle to the widget in this cell in order to access it's Text property
      UISegmentedControl *yesno = (UISegmentedControl *)[retcell viewWithTag:200];

      // .. set text for yesno segments

      // save the row numer to this object's tag so we can retrieve the item object
      // on click
      [yesno setTag:thisrow];

   }
   if ([items.Type isEqualToString:SETTING])
   {
      retcell = [tableView dequeueReusableCellWithIdentifier:@"setting"];
      UISegmentedControl *setting = (UISegmentedControl *)[retcell viewWithTag:201];
      // set text for segments...
      [setting setTag:thisrow];
   }

return (retcell);
}

在我看来,您应该为
YESNO
单元格和
设置
单元格创建一些
UITableViewCell
子类。然后在
tableView:cellForRow:atIndexPath:
中,返回
YESNOTableViewCell
SETTINGTableViewCell
。大概是这样的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
   UITableViewCell *retcell;
   NSInteger thisrow = indexPath.row;

   // retrieve the items which should be printed for this
   // row. set text on widget depending on item type
   OBJ_Items *items = [mCriteria objectForKey:thisrow];

   if ([items.Type isEqualToString:YESNO])
   {
      YESNOTableViewCell yesNoCell = [tableView dequeueReusableCellWithIdentifier:@"yesno"];

      // .. set text for yesno segments
      // the UISegmentedControl will be an IBOutlet @property on YESNOTableViewCell

      // save the row numer to this object's tag so we can retrieve the item object
      // on click
      [yesNoCell.segmentedControl setTag:thisrow];

      // return the yesNoCell
      retcell = yesNoCell;

   }
   if ([items.Type isEqualToString:SETTING])
   {
      SETTINGTableViewCell settingCell = [tableView dequeueReusableCellWithIdentifier:@"setting"];

      // set text for segments...
      // the UISegmentedControl will be an IBOutlet @property on SETTINGTableViewCell

      [settingCell.setting setTag:thisrow];
   }

return (retcell);
}

为什么你要用标签来识别原型单元,你应该用重用标识符来完成这个任务。我想我没有清楚地解释我的问题。我重新编写了它,并添加了一个代码段。请看一看,嗯。。这是一个有趣的方法。。因此,在我的子类中,我可以简单地添加一个名为
setTableRow
getTableRow
的方法,并相应地设置该属性?我想这可能是我摆脱困境所需要的。谢谢我发现的另一种方法是在
UISegementedController
上使用
addTarget
,并检索选择器中选定的行。仍然需要在表视图上实现
IBOutlet
,但不需要进行子类化。