UISwitch и UIButton в UITableViewCell, как их идентифицировать - PullRequest
1 голос
/ 08 октября 2010

У меня есть небольшая проблема в моем UITableViewCell.Каждая пользовательская ячейка имеет переключатель UIS и кнопку UIB.И когда пользователь меняет значение UISwitch, я хотел бы установить для свойства button.hidden значение YES.

Я могу определить, какой UISwitch был нажат с помощью этого метода:

- (IBAction)closeHour:(id)sender {

     UISwitch  *senderSwitch = (UISwitch *)sender;
     UITableViewCell *switchCell = (UITableViewCell *)[senderSwitch superview];
     NSUInteger buttonRow = [[resas indexPathForCell:switchCell] row];
     NSLog("%d", buttonRow);
}

Thisработают отлично, но я не знаю, как получить UIButton с тем же индексом (indexPath.row), чтобы установить его скрытое свойство.Я думал об установке тега в каждом UIButton, но я не очень дружу с ними.

Есть способ создания моей ячейки, если кто-то может сказать мне, если я делаю какую-то ерунду, это может быть очень приятно:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  { 
     static NSString   *cellIdentifier1 = @"Cell1";
     static NSString   *cellIdentifier2 = @"Cell2";

     if ([typeOfData objectAtIndex:indexPath.row] == @"hour") {
         TimeCell   *cell = (TimeCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier1];

      if (cell == nil) {
          cell = [[[TimeCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellIdentifier1] autorelease];
          UISwitch *isOpen = [[UISwitch alloc] initWithFrame:CGRectMake(300, 7, 0, 0)];

          if ([self openOrCloseHour:[[[finalData objectAtIndex:indexPath.row] substringToIndex:2] intValue]])
              isOpen.on = YES;
          else {
              isOpen.on = NO;
              [isOpen addTarget:self action:@selector(closeHour:) forControlEvents:UIControlEventValueChanged];
              [cell addSubview:isOpen];
              [isOpen release];
              UIButton   *add = [UIButton buttonWithType:UIButtonTypeContactAdd];
              add.frame = CGRectMake(400, 3, 170, 40);
              [add addTarget:self action:@selector(addResa:) forControlEvents:UIControlEventTouchDown];
              [cell addSubview:add];
          }
      }
      [cell.time setText:[finalData objectAtIndex:indexPath.row]];
      return cell;
   }
   else 
   {
         ResaCell   *cell = (ResaCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier2];

         if (cell == nil) {
             cell = [[[ResaCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellIdentifier2] autorelease];
             [cell.isConfirm setImage:[UIImage imageNamed:@"confirm.png"]];
             [cell.nom  setText:[finalData objectAtIndex:indexPath.row]];
             [cell.prenom  setText:[finalData objectAtIndex:indexPath.row]];
             [cell.arrive  setText:[finalData objectAtIndex:indexPath.row]];
         }

         return cell;
    }

    return nil;
}

Для информации у меня есть два типа клеток.Проблема в TimeCell.

У кого-нибудь есть решение?

1 Ответ

2 голосов
/ 08 октября 2010

В ячейке для строки:

isOpen.tag = 2000+indexPath.row;
add.tag = 4000+indexPath.row;

Чтобы получить UIB-кнопку в ближайшем часе, IBACtion сделайте:

int tagButton = senderSwitch.tag-2000+4000;
button = (UIButton*)[self.view viewWithTag:tagButton];
...