Как динамически добавлять ячейки Section и TableView - PullRequest
3 голосов
/ 02 апреля 2012

У меня есть кнопка, при нажатии которой будет добавлен раздел просмотра таблицы, а также добавится новая строка в этот раздел.Как я могу реализовать это программно?

У меня есть массив ячеек.

Вот мои коды

- (IBAction)addCell:(id)sender {

    UITableViewCell *newCell = [[UITableViewCell alloc] init];

    counter++;
    [cells addObject:newCell];

    [self.tableView reloadData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [cells count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return 1;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
      //this is where i want to adjust the row per section
      //this code hide the recent sections, only the current created section appears
      return [cells objectAtIndex:indexPath.row];
}

Ответы [ 3 ]

1 голос
/ 02 апреля 2012

Привет, попробуйте прочитать это:

Как программно отобразить UITableView?

Программное добавление ячеек в UITableView


Надеюсь, это поможет вам.

0 голосов
/ 08 ноября 2015

Вам нужно только добавить новый раздел и новый элемент в массив, который содержит раздел и такие элементы:

- (void)viewDidLoad
{
    [super viewDidLoad];

    animals = @{@"Section 1" : @[@"Item 1", @"Item 2", @"Item 3"],
                @"Section 2" : @[@"Item 1", @"Item 2"]};
}

, после этого вы просто перезагружаете tableView везде, где нужна логика:

[self.tableView reloadData];
0 голосов
/ 02 апреля 2012

Во-первых, обновите свою модель данных (NSArray или изменяемый).Во-вторых, когда вы хотите обновить просмотр таблицы, добавьте код [self.tableView reloadData];


упс, ваш код какой-то странный uitaleviewDataSource, Delegate Method.

также у вас есть какая-то ошибка.

почему вы реализуете numberOfRowsInSection, возвращающее 1?очень странно.

Я оценил приведенный ниже код.

CASE 1. Нет имеет DataModel.

- (IBAction)addCell:(id)sender 
{

    cellRowsCount++;

    [self.tableView reloadData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return cellRowsCount;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
      static NSString *CellIdentifier = @"Cell";
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
      if (cell == nil) 
      {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
       reuseIdentifier:CellIdentifier];
      }

     return cell;
   }

ваши коды, dataModel (NSArray или изменяемые) не обязательно нужны,поэтому я просто добавил переменную rowCount, и ваш rowCount из tableviewCell синхронизировался.

Если вы хотите использовать DataModel, ниже CASE2.см. плз.


CASE2.имеет DataModel.

- (IBAction)addCell:(id)sender 
{

    textCount ++;

    NSString *cellText = [NSString stringWithFormat:"blah %d", textCount];
    [myArray addObject:cellText];

    [self.tableView reloadData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
  return [myArray count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  return [[myArray objectAtIndex:section] count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
  if (cell == nil) 
  {
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:CellIdentifier];
  }

  cell.textLabel.text = (NSString *)[myArray objectAtIndex:indexPath.row];

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