как сделать флажок в uitableview с условием?

У меня есть две кнопки, когда я нажимаю на дисплей btn1 UITableview так же, как на изображении 1 ниже, и я нажимаю на дисплей btn2 UIableView так же, как на изображении ниже 2.

Я использую пользовательскую ячейку. Я сделал перезагрузку таблицы, но она отображает «флажок» как в UITableview.

  BOOL isChecked;
  isChecked = true;


    -(IBAction)btn1:(id)sender
     { 
        isChecked = true;
      [self.mytableview reload];
     } 
    -(IBAction)btn2:(id)sender
     { 
        isChecked = false;
      [self.mytableview reload];
     } 

cellRowAtIndexPath метод в:

  if(isChecked)
  {
    customcell.trLabel.text = [arr1 objectAtIndex : indexpath.row]
    [customcell.button setImage:[UIImage imageNamed:@"checked.png"] forState:UIstateselected];
     [customcell.button setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIstateNormal];
     [customcell.button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
  }
  else
  {
    customcell.trLabel.text = [arr2 objectAtIndex : indexpath.row]
    [customcell.buttton = NULL;
  }

другой метод

 -(void)checkButtonTapped:(id)sender
  {
      sender.selected = !sender.selected;
  }

изображение 1

изображение 2

я сделал выбрать все.

didSelect Метод:

  DemoTableViewCell *cell;
if(indexPath.row == 0)
{
    for (int i = 0; i < [self.tableview1 numberOfSections]; i++) {
        for (int j = 0; j < [self.tableview1 numberOfRowsInSection:i]; j++) {
            NSUInteger ints[2] = {i,j};
            NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:ints length:2];
            cell = (DemoTableViewCell *)[self.tableview1 cellForRowAtIndexPath:indexPath];
            //Here is your code

            UIButton *btn = cell.button;

            if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"checked.png"]])
            {
                [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
                // other statements
            }
            else
            {
                [btn setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];

            }
        }
    }
}
else
{

   cell = (DemoTableViewCell *)[self.tableview1 cellForRowAtIndexPath:indexPath];

    UIButton *btn = cell.button;

    if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"checked.png"]])
    {
        [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
        // other statements
    }
    else
    {
        [btn setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];

    }


}

Мой вопрос:

1) выберите все опции, выберите все «флажки», которые сделаны, но когда я «сниму отметку» с любого из них, выберите все опции, которые также будут «сняты». 2) Не отображать "флажок" на изображении 2 UITablevieCell. 3) Когда я «сниму флажок» с элемента 3 и снова нажму, выберите все опции, снимите все «флажки», кроме элемента 3, и элемент 3 отмечен.


person Priyank Gandhi    schedule 21.05.2014    source источник


Ответы (1)


Решение 2) Не отображать «флажок» на изображении 2 UITablevieCell

Вам нужно создать другую ячейку прототипа без флажка. Затем в методе cellRowAtIndexPath используйте эту ячейку, если была нажата кнопка 2


Для других вопросов вам нужно сохранить состояние каждого флажка (в массиве или словаре). Затем в методе cellRowAtIndexPath в зависимости от состояния флажка в этой строке установите или снимите флажок ячейки

1) Имейте NSMutableArray в своем ViewController, где вы будете хранить все свои состояния флажков (отмечены или не отмечены).

2) В методе, который вызывается, когда флажок установлен/не отмечен, обновите 1 или 0 в массиве, например:

- (void) actionCheckbox {
        self.mydata[indexPath.row] = 1;    // set 0 or 1
        [self.tableview reloadRowsAtIndexPath ...];  // Don't remember exact method name
}

3) In cellRowAtIndexPath,

 if(self.mydata[indexPath.row] == 1) {
     // tick checkbox for this row
 } else {
     // untick checkbox for this row
 }
person user427969    schedule 22.05.2014
comment
я получил это ваше первое решение. но я не нашел другого решения, можете ли вы привести какой-нибудь пример или отличный совет @user427969 - person Priyank Gandhi; 22.05.2014
comment
привет, я понял ваш ответ, но дает мне предупреждение или ошибку. @user427969 - person Priyank Gandhi; 22.05.2014
comment
я получаю предупреждение об ошибке идентификатора, а не разговора. есть ли у вас идеальное решение, пожалуйста, дайте мне и ту же проблему, как сохранить выбранный индекс в методе выбора, когда я нажимаю флажок «выбрать все», все отмечены, и когда я снимаю любой из них, выберите все опции не снять галочку. или я нажимаю еще раз, чтобы выбрать все опции, кроме опции снять отметку, а другие не отмечены, пожалуйста, предоставьте мне решение @user427969 - person Priyank Gandhi; 22.05.2014
comment
Извините, я не могу делать вашу работу. Я могу только направить вас в правильном направлении. - person user427969; 22.05.2014
comment
В действии кнопки «Выбрать все» выполните итерацию по всему массиву self.mydata и установите все на 1, а для действия кнопки «Снять все» установите все на 0. После этого перезагрузите таблицу. - person user427969; 22.05.2014