views:

101

answers:

1

Hi,

I've got a little problem in my UITableViewCell. Each Custom Cell have an UISwitch and an UIButton. And when the user change the value of the UISwitch i would like to set the button.hidden property to YES.

I can find which UISwitch was clicked with this method:

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

This work perfectly, but i don't know how to get the UIButton at the same index (indexPath.row) to set his hidden property. I thought about setting a tag in each UIButton but i'm not very friendly with those.

There is how my Cell was created, if someone can tell me if i am doing some crap here it could be very nice:

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

For information I have got two type of cell. The problem is on TimeCell.

Is anybody have the solution ?

A: 

In the cellForRow :

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

To get the UIButton in the closeHour IBACtion make :

int tagButton = senderSwitch.tag-2000+4000;
button = (UIButton*)[self.view viewWithTag:tagButton];
MathieuF
hallelujah !!! it work perfectly !!! Thanks a lot. But why i have to add 2000 or 4000 ?
foOg
You can replace them with "bigs" numbers you want !
MathieuF