views:

638

answers:

2

I have 5 seperate sections in a table, 2 of the sections have customizable cells, when in EDITING mode, 2 of the sections produce an additional cell that will add a new cell to the list. My problem is that when I invoke edit mode, the UISwitch FREAKS OUT! and decides to jump around, VERY SIMPLE code, just have NO IDEA why the UISwitch is jumping to different cells in DIFFERENT SECTIONS when it should NOT!

static NSInteger kCustomTextTag = 1;
static NSInteger kServiceTag = 3;
static NSInteger kConnectTag = 4;
static NSInteger kVibrateTag = 1;

// creating the cells
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

Profile_ManagerAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
 cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
 cell.hidesAccessoryWhenEditing = YES;
}

UISwitch *swService = nil;
swService = [[[UISwitch alloc] initWithFrame:CGRectMake(195, 8, 160, 27)] autorelease];
[swService addTarget:self action:@selector(serviceSwAction:) forControlEvents:UIControlEventValueChanged];
swService.tag = kServiceTag;

UISwitch *swConnect = nil;
swConnect = [[[UISwitch alloc] initWithFrame:CGRectMake(195, 8, 160, 27)] autorelease];
[swConnect addTarget:self action:@selector(connectSwAction:) forControlEvents:UIControlEventValueChanged];
swConnect.tag = kConnectTag;

UISwitch *swVibrate = nil;
swVibrate = [[[UISwitch alloc] initWithFrame:CGRectMake(195, 8, 160, 27)] autorelease];
[swVibrate addTarget:self action:@selector(vibrateSwAction:) forControlEvents:UIControlEventValueChanged];
swVibrate.tag = kVibrateTag;

 if(indexPath.section == 0)
 {
  //CGRectMake Method (x, y, width, height)
  custProfileNameLabel = [[[UITextField alloc] initWithFrame:CGRectMake(10, 11, 290, 21)] autorelease];
  custProfileNameLabel.tag = kCustomTextTag;
  custProfileNameLabel.textAlignment = UITextAlignmentLeft;
  [cell.contentView addSubview:custProfileNameLabel];
  custProfileNameLabel.backgroundColor = [UIColor clearColor];
  custProfileNameLabel.userInteractionEnabled = NO;
  custProfileNameLabel.placeholder = @"Custom Profile Name";
  custProfileNameLabel.autocapitalizationType = UITextAutocapitalizationTypeWords;
  custProfileNameLabel.clearButtonMode = UITextFieldViewModeWhileEditing;

  //UIKeyboardTypeDefault;
  cell.selectionStyle = UITableViewCellEditingStyleNone;
  CustomProfile *cProf = [CustomProfile alloc];
  cell.textLabel.text = [cProf tName];
 }


 if(indexPath.section == 1)
 {
  if(indexPath.row == ([[appDelegate serviceArray] count]) && self.editing){
   cell.textLabel.text = @"Add a Service";
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   cell.accessoryType = UITableViewCellAccessoryNone;
   swService.hidden = YES;
   return cell;
  }else{
   swService.hidden = NO;
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   cell.accessoryType = UITableViewCellAccessoryNone;
   cell.textLabel.text = [[appDelegate serviceArray] objectAtIndex:indexPath.row];
  }
  [cell addSubview:swService];
 }


 if(indexPath.section == 2)
 {
  if(indexPath.row == ([[appDelegate connectArray] count]) && self.editing){
   cell.textLabel.text = @"Add a Connection";
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   cell.accessoryType = UITableViewCellAccessoryNone;
   swConnect.hidden = YES;
   return cell;
  }else{
   swConnect.hidden = NO;
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   cell.accessoryType = UITableViewCellAccessoryNone;
   cell.textLabel.text = [[appDelegate connectArray] objectAtIndex:indexPath.row];
  }
  [cell addSubview:swConnect];
 }


 if(indexPath.section == 3)
 {
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
  NSString *documentsDirectory = [paths objectAtIndex:0]; 
  NSString *myPlistPath = [documentsDirectory stringByAppendingPathComponent:@"ProfileManager.plist"]; 
  NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:myPlistPath]; 

  NSString *value;
  value = [plistDict objectForKey:@"Custom Ringtone"];

  if(indexPath.row == ([[appDelegate ringArray] count]) && self.editing){
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
   cell.accessoryType = UITableViewCellAccessoryNone;
  }else{
   cell.selectionStyle = UITableViewCellSelectionStyleBlue;
   cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  }

  cell.textLabel.text = value;
 }

 if(indexPath.section == 4)
 {
  if(indexPath.row == 0 && self.editing)
  {
   //cell.userInteractionEnabled = NO;
   cell.accessoryType = UITableViewCellAccessoryNone;
   cell.textLabel.text = @"Vibrate";
   swVibrate.hidden = YES;
  }else{
   swVibrate.hidden = NO;
   //cell.accessoryType = UITableViewCellAccessoryNone; 
   cell.selectionStyle = UITableViewCellSelectionStyleBlue;
   cell.textLabel.text = @"Vibrate";
  } 

  [cell.contentView addSubview:swVibrate];
 }

 return cell;

}

picture of the glitch! link text

can ANYONE help me with this error?

+2  A: 

Well, the reason this glitch was made possible is because the Controls were created when creating the cell, so it just continued to create additional controls when view appeared.

If you are receiving this glitch too, make sure you create the controls at ViewDidLoad, or call a void, just dont create the controls in the cellForRowAtIndexPath:

AWright4911
A: 

I am not convinced that your problem was creating of controls in cellForRowAtIndexPath. I think you should try changing the values of the Tags to some other numbers (for example 35,36,37...). Have you tried that?

Best regards!

Oliver