2013-03-25 3 views
0

У меня есть табличный вид с переключателем в каждой ячейке. Я хочу скрыть переключатели в режиме редактирования. Я сделал со следующим кодомне может получить доступ к невидимым ячейкам в uitableview

-(void)displaySwitch:(BOOL)status { 

    int count = [self.tblView numberOfRowsInSection:0]; 
    int i; 
    for (i = 0; i<count; i++) { 
     UITableViewCell *eachCell = [self.tblView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 
     //NSLog(@"%@",eachCell); 
     NSArray *subViews = [eachCell.contentView subviews]; 
     for (UISwitch *eachObject in subViews) { 
      if ([eachObject isKindOfClass:[UISwitch class]]) { 

       CATransition *animation = [CATransition animation]; 
       animation.type = kCATransitionFade; 
       animation.subtype = kCATransitionFromLeft; 
       animation.duration = 1.4; 
       animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
       [eachObject.layer addAnimation:animation forKey:kCATransition]; 
       eachObject.hidden = status; 

      } 

     } 

    } 

} 

Он отлично работает для всех видимых ячеек. Но я не могу получить доступ к любым невидимым ячейкам с помощью этого кода. cell возвращает nil. Таким образом, переключатели в невидимой ячейке не скрываются. Как я могу решить эту проблему. помогите мне

Еще одна вещь, анимация не работает здесь. Но это второстепенная проблема.

+0

причинно- вы не можете их открыть, потому что они не созданы еще –

+0

Вам нужно разместить код cellForRowAtIndexPath() для достижения вашего требования. –

ответ

1

Модифицированный код только посмотрите

-(void)displaySwitch:(BOOL)status onCell:(UITableViewCell*)cell { 

    NSArray *subViews = [cell.contentView subviews]; 
    for (UISwitch *eachObject in subViews) { 
     if ([eachObject isKindOfClass:[UISwitch class]]) { 

      CATransition *animation = [CATransition animation]; 
      animation.type = kCATransitionFade; 
      animation.subtype = kCATransitionFromLeft; 
      animation.duration = 1.4; 
      animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
      [eachObject.layer addAnimation:animation forKey:kCATransition]; 
      eachObject.hidden = status; 

     } 
    } 
} 

Затем вызовите эту функцию

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if(cell == nil){ 

     //Cell initialization 

    } 

    [self displaySwitch:self.editing onCell:cell]; 
} 
+1

спасибо. ты великолепен. это спасает мою жизнь – manujmv

Смежные вопросы