0

ストーリーボードに定義された 3 つのプロトタイプ セルがありUISegmentedControl、それぞれにウィジェットが含まれています。ユーザーに提示する基準は 2 種類あります。一方は[ON|OFF]他方です[1|2|3|4]。各ウィジェットのテキストをプログラムで設定する必要があるため、.wpTagを使用して正しいプロトタイプ セルからウィジェットを取得するために、ストーリーボードでウィジェットを設定しています[cell viewWithTag:XX]。問題は、すべてのUISegmentedControlウィジェットが同じリスナーに接続されており、ユーザーがどの基準をオンまたはオフにしているのかを知る方法がないことです。Tag行番号に設定された値を見てきましたが、ストーリーボードでcellForRowAtIndexPath既に使用していTagます。リスナーでどの行が操作されているかを知るにはどうすればよいですか?

更新: コード スニップが追加されました

- (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);
}
4

1 に答える 1

0

セルとセルのUITableViewCellサブクラスをいくつか作成する必要があるように思えます。次に で、 aまたは aを返します。このようなもの:YESNOSETTINGtableView:cellForRow:atIndexPath:YESNOTableViewCellSETTINGTableViewCell

- (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);
}
于 2013-11-04T18:58:39.473 に答える