#ios #objective-c #uitableview #nsmutablearray
#iOS #objective-c #uitableview #nsmutablearray
Вопрос:
В моем приложении для iOS у меня два NSMutableArray
@implementation MyViewController {
NSMutableArray *arrOne;
NSMutableArray *arrTwo;
}
объявлено в моем файле реализации и один UITableView
@property (strong, nonatomic) IBOutlet UITableView *tableView;
объявлено внутри MyController.h
Я хочу загрузить оба содержимого этого массива в ту же таблицу, где сначала arrOne content, а затем arrTwo contants.
Ниже показано, как я получил количество строк таблицы
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([arrOne count] > 0 amp;amp; [arrTwo count] > 0) {
return [arrOne count] [arrTwo count];
} else if ([arrTwo count] > 0) {
return [arrTwo count];
} else {
return 10;
}
}
и ниже приведено место, где я пытался создать ячейки своей таблицы
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"myTable";
if ([arrOne count] > 0 amp;amp; [arrOne count] > indexPath.row) {
UITableViewCell *defaultCell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (defaultCell == nil) {
defaultCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
return defaultCell;
} else {
MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
return cell;
}
}
С помощью приведенного выше кода и предположим, что у arrOne есть только один элемент, TableView должен отображать первую ячейку белым цветом, а все остальные — с моей пользовательской ячейкой. Вместо этого отображается первая ячейка белого цвета, как и ожидалось, и снова несколько ячеек в середине (5, 9, 13 …) также белого цвета. Пока не могу определить причину. Есть идеи, почему?
Если это неправильный способ реализации двух массивов в одном табличном представлении, что это?
Ответ №1:
Если arrOne
содержит только один элемент (как вы говорите) и arrTwo
пуст, тогда у вас будет всего 10 ячеек в соответствии с numberOfRowsInSection
. Первая ячейка будет UITableViewCellStyleDefault
ячейкой, а следующие 9 должны быть MyTableViewCell
ячейками.
Причина, по которой вы видите несколько UITableViewCellStyleDefault
ячеек, заключается в том, что вы используете один и тот же идентификатор ячейки. Переместите объявление идентификатора внутри каждого из операторов if
/ else
и используйте другой идентификатор для каждого типа ячейки.
if ([arrOne count] > 0 amp;amp; [arrOne count] > indexPath.row) {
static NSString *defaultTableIdentifier = @"defaultReuse";
UITableViewCell *defaultCell = [tableView dequeueReusableCellWithIdentifier:defaultTableIdentifier];
if (defaultCell == nil) {
defaultCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:defaultTableIdentifier];
}
return defaultCell;
} else {
static NSString *simpleTableIdentifier = @"myCustomCellReuse";
MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
return cell;
}
(Кроме того, отличается ли ваше имя пера от имени класса? MyTableViewCell
против MyTableCell
. Потому что вы объявляете ячейку класса MyTableViewCell
, а затем загружаете имя MyTableCell
файла.)
Комментарии:
1. В общем, если вы используете несколько типов ячеек и видите, что неправильный тип отображается через странные промежутки времени, скорее всего, это проблема с тем, как вы повторно используете ячейки.