2012-12-10 3 views
0

У меня есть таблица, где каждая ячейка имеет UISwitch, когда я выбираю ячейку, я могу переключить UISwitch, когда я выбираю следующую ячейку в виде таблицы, я не должен быть в состоянии переключить его или даже если я хочу переключить его, ранее выбранный переключатель должен быть отключен с помощью UIAlertView, так что в принципе только один UITableViewCell должен быть включен для переключения.Только один UISwitch должен иметь возможность переключаться в UITableviewCell

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

static NSString *[email protected]"cellIdentifier"; 
     PPtableCell *cell=(PPtableCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

     if (cell==nil) 
     { 
      cell=[[PPtableCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
     } 

     cell.remedyImage.image=[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyImageDic"]; 
     cell.remedyTextLabel.text=[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyTxtDic"]; 
     cell.remedyLabel.text=[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyName"]; 
     cell.remedyID=[[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyID"]intValue]; 
     cell.frequency = [[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"RemedyFrequency"]intValue]; 
     cell.symptomIDNo =[[[remedyArray objectAtIndex:indexPath.row]objectForKey:@"SymptomID"]intValue]; 

     // cell.textLabel.text = [[notify objectAtIndex:indexPath.row] objectForKey:@"notifyData"]; 


     // Specific Background Image Depending upon the Row 

     if (indexPath.row==0) 
     { 
      cell.backgroundCellImage.image=[UIImage imageNamed:@"top-cell.png"]; 
     } 
     else if (indexPath.row==remedyArray.count-1) 
     { 
      cell.backgroundCellImage.image=[UIImage imageNamed:@"bottom-cell.png"]; 
     } 
     else 
     { 
      cell.backgroundCellImage.image=[UIImage imageNamed:@"middle-cell.png"]; 
     } 


     if ([indexPath isEqual:remedySelectedIndexPath]) 
     { 
      cell.isZoomedIn = YES; 
     } 
     else 
     { 
      cell.isZoomedIn = NO; 
     } 

     return cell; 

    } 

} 



-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

if(tableView==remedyTableView) 
    { 

     PPtableCell *cell = nil; 
     cell=(PPtableCell*)[tableView cellForRowAtIndexPath:indexPath]; 
     cell.selectionStyle=UITableViewCellSelectionStyleNone; 
     CGSize maximumLabelSize=CGSizeMake(320.0,100.0); 
     CGSize expectedLabelSize=[cell.remedyTextLabel.text sizeWithFont:cell.remedyTextLabel.font constrainedToSize:maximumLabelSize 
                  lineBreakMode:cell.remedyTextLabel.lineBreakMode]; 

     if (expectedLabelSize.height > 17 || expectedLabelSize.width > 260.0) 
     { 
      if ([indexPath isEqual:remedySelectedIndexPath]) 
      { 
       remedySelectedIndexPath = nil; 
       [remedyTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 

      } 
      else 
      { 
       oldSelectedIndexPath=remedySelectedIndexPath; 
       remedySelectedIndexPath=indexPath; 

       if (oldSelectedIndexPath==nil) 
       { 
        [remedyTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:remedySelectedIndexPath] withRowAnimation:UITableViewRowAnimationNone]; 

       } 

       else 
       { 
        [remedyTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:oldSelectedIndexPath,remedySelectedIndexPath,nil] withRowAnimation:UITableViewRowAnimationNone]; 

       } 
      } 

     } 

    } 

} 

Вот код, который имеет дело с UISwitches:

(IBAction)notification:(id)sender { 
    if (sender == notifyMe) { 
     if(notifyMe.isOn == YES) { 
      toggle = YES; 
      NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
      [defaults setBool:notifyMe.on forKey:@"switchValueKey"]; 
      [defaults synchronize]; 
      NSLog(@"Notification is ON"); 
     } 
    } else { 
     toggle = NO; 
    } 
} 

if ([cellDelegate respondsToSelector:@selector(notificationReqd:)]) { 
    [cellDelegate notificationReqd:self]; 
} 
} 
+0

Каков твой вопрос?Вы включили некоторый код таблицы, но ничего с UISwitches в нем - вам, возможно, повезло бы получить ответ с конкретным вопросом и тем, что вы уже пробовали в коде. –

+0

Я пытаюсь понять, как добавить uiswitches в tableviewcell – orgami

ответ

0

У меня был подобное моделирование с switches.I сделало customview с UiSwitch назначены тегами и по умолчанию отключено interaction.This пользователя просмотру был установлен как принадлежность к ячейкам в методе cellForRowAtIndexPath.

Чтобы включить взаимодействие активной ячейки осуществить

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 

Согласно NSIndexPath найти в yourtableview ячейке в customview с переключателем и установить его свойство userinteractionenabled лет ДА ​​

3

3 steps-

  1. комплект setUserInteractionEnabled до NO всего UISwitch в tableView:cellForRowAtIndexPath:

  2. установить setUSerIntertactionEnabled в YES к UISwitch из конкретной ячейки в tableView:didSelectRowAtIndexPath

  3. установить setUSerIntertactionEnabled в NO к UISwitch из конкретной ячейки в tableView:didDeselectRowAtIndexPath

Это все, что вам нужно сделать.

Отредактировано:

для 2 и 3, вы должны взять ссылку на ячейку, что вы выбираете, или отменив.

Для этого нужно выполнить следующие действия как 2 и 3

UITableViewCell *cell=[yourTableView cellForRowAtIndexPath:indexPath]; 
cell.notifyMe setUserInteractionEnable=YES; // set NO for step 3 
+0

notifyMe является объектом UISwitch. [notifyMe setUserInteractionEnabled: YES]; я делаю это правильно? – orgami

+0

см. Мой отредактированный ответ –

+0

Я не могу изменить состояние UISwitch в ячейке tableview ... – orgami

0

Для лучшего пользовательского опыта, вы должны использовать notifyMe.enabled скорее чем notifyMe.userInteractionEnabled.

Сначала отключите все переключатели. Вы могли бы добиться этого в cellForRowAtIndexPath:

… 
cell.notifyMe.enabled = NO; 
… 

Чтобы отключить выключатель в ячейку, которая в настоящее время неустановленным:

- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == tableViewThatDealsWithSwitches) 
    { 
     PPtableCell *cell = (PPTableCell *)[tableView cellForRowAtIndexPath:indexPath]; 
     cell.notifyMe.enabled = NO; 
    } 
    return indexPath; 
} 

И включить переключатель в ячейку, которая в скором времени будет выбран:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == tableViewThatDealsWithSwitches) 
    { 
     cell.notifyMe.enabled = YES; 
     return indexPath; 
    } 
} 
Смежные вопросы