Search code examples
iosxcodeipaduitableviewuiswitch

Content add subview not working?


How is your day , Hope every thing went well

My question is that I have uiswitch in uitableviewcell . However when i used contentview to add the switch as a subview in the cell it does not appear on my cells ? Any one please do you Know why they don't appear on each custom cell ? THANKS IN ADVANCE .

Here is my code :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    UISwitch *switchController = nil ;

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:@"Cell"];

      switchController=  [[UISwitch alloc] initWithFrame:CGRectZero];
        switchController.tag=100;
        [cell.contentView addSubview:switchController];
        CGRect switchFrame = switchController.frame;
        switchFrame.origin.x = 50.0f;
        switchFrame.origin.y = 10.0f;
        switchController.frame = switchFrame;
        [switchController addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];

    }

    else
    {
        switchController =(UISwitch *)[cell.contentView viewWithTag:100];

    }

//This for persist switch state when scroll up or down 
    if ([[[self.SwitchArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row ]isEqualToString:@"ON"])
    {

        switchController.on=YES;

    }
    else
    {
        switchController.on=NO;
    }

   NSString *value = [[mainArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
    cell.textLabel.text = value;
    cell.textLabel.textAlignment = NSTextAlignmentRight;
    cell.textLabel.font = [UIFont systemFontOfSize:15.0];

    return cell;

}

Here is the code of SwitchChanged :

-(void)switchChanged:(UISwitch *)sender
{
    UITableViewCell *cell = (UITableViewCell *)[[sender superview] superview];
    NSIndexPath *index=[mainTableView indexPathForCell:cell];

    if (sender.on)
    {

        [[self.SwitchArray objectAtIndex:index.section] replaceObjectAtIndex:index.row withObject:@"ON"];

    }
    else
    {
        //Update my switch states array 
        [[self.SwitchArray objectAtIndex:index.section] replaceObjectAtIndex:index.row withObject:@"OFF"];

   }

    [padFactoids setObject:[NSKeyedArchiver archivedDataWithRootObject:SwitchArray] forKey:@"savedArray"];
    [padFactoids synchronize];

}

Solution

  • From your comments i came to know you are using the storyboard fro creating table view. Add switch to the table view prototype cell and give tag as 100.

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
     UISwitch *switchController =(UISwitch *)[cell viewWithTag:100];
    
     [switchController addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
    
    //This for persist switch state when scroll up or down 
    if ([[[self.SwitchArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row ]isEqualToString:@"ON"])
    {
    
        switchController.on=YES;
    
    }
    else
    {
        switchController.on=NO;
    }
    
     NSString *value = [[mainArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
    cell.textLabel.text = value;
    cell.textLabel.textAlignment = NSTextAlignmentRight;
    cell.textLabel.font = [UIFont systemFontOfSize:15.0];
    
    return cell;
    
    
    }