Скрытие ячеек табличного представления с включением / выключением в iPhone - PullRequest
2 голосов
/ 18 февраля 2012

Это может быть простой вопрос для вас, эксперты, но я не могу найти правильное решение.

В своем приложении я создал табличное представление, чтобы вывести список элементов.

В первом ряду ячейки есть переключатель (ON/OFF).

Таким образом, мой клиент должен скрыть нижние ячейки (кроме нулевой ячейки), когда переключатель OFF, и показать все ячейки, когда переключатель ON.

Я создал переключатель через код.

Может кто-нибудь, пожалуйста, помогите мне, как это сделать?

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 18 февраля 2012

Метод dataOfRows dataSource - возвращает 1 и reloadTableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  /// ....
            self.switchView = [[[UISwitch alloc] initWithFrame:CGRectZero]autorelease];
            cell.accessoryView = self.switchView;
            [self.switchView setOn:NO animated:NO];
            [self.switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];

//....

}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   if [self.switchView.on]
       return 1;
   else 
   {
      // normal code return
   }
}

- (void) switchChanged:(id)sender {
     [self.tableView reloadData];
} 
5 голосов
/ 18 февраля 2012

Вы можете использовать insertRowsAtIndexPaths, это не только добавит, но и сделает анимацию добавления новой строки

сначала добавьте цель UIControlEventTouchUpInside в UISwitch.

[switch addTarget:self action:@selector(switchChange:) forControlEvents:UIControlEventValueChanged];

- (void) switchChange: (UISwitch *) sender {

       isSwitchOn = sender.on; //edited
    [myTable beginUpdates];
    NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0];
    NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0];
    //you may add as many row as you want here.

    [myTable insertRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil] withRowAnimation:UITableViewRowAnimationMiddle];
    [myTable endUpdates];

}

и убедитесь, что вы добавите, сколько строквы вставите в numberOfRowsInSection:

  • (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) раздел {

    , если (isSwitchOn) вернется1;

    , иначе возврат 3;// сколько строк будет после включения

}

Возможно, вы захотите проверить [myTable insertSections:withRowAnimation:, чтобы вставить другой раздел и сделать то же, что и выше,но не забудьте указать, сколько разделов вы добавите, в numberOfSectionsInTableView:

ОБНОВЛЕНИЕ:

внедрить deleteRowsAtIndexPaths: если выключить.

- (void)switchChange: (UISwitch *) отправитель {

    isSwitchOn = sender.on;

  if(isSwitchOn){
        [myTable beginUpdates];
         NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0];
         NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0];
         //you may add as many row as you want here.

        [myTable insertRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil]  withRowAnimation:UITableViewRowAnimationMiddle];
        [myTable endUpdates];
    }
  else{
        [myTable beginUpdates];
         NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0];
         NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0];
         //you may add as many row as you want here.

        [myTable deleteRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil]  withRowAnimation:UITableViewRowAnimationFade];
        [myTable endUpdates]; 
 }

}

1 голос
/ 18 февраля 2012

Существует метод UITableViewDataSource с именем tableView: numberOfRows: inSections. Просто проверьте состояние переключателя и верните 1, если он выключен, или все строки, если он включен. Просто вызывайте метод [tableView reloadData] каждый раз, когда вы включаете и выключаете. Так просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...