2015-11-07 3 views
-1

У меня есть один массив любого количества. Я хочу разделить в другом разделе как на 7. Я не могу заставить это работать. Вот пример из двух элементов.Как манипулировать массивом в разделе?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    array =[NSMutableArray arrayWithObjects:@"d",@"s",@"a",@"qq",@"dqd",@"dqq",@"qdqdf",@"dqdfqf", nil]; 

    // Do any additional setup after loading the view from its nib. 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return ceil(array.count/2.0); // round up the floating point division 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSInteger sections = [self numberOfSectionsInTableView:tableView]; 
    if (section == sections - 1) { 
     NSInteger count = array.count & 2; 
     if (count == 0) { 
      count = 2; 
     } 
     return count; 
    } else { 
     return 2; 
    } 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"SimpleTableItem"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 

    // cell.textLabel.text = [tableData objectAtIndex:indexPath.row]; 
    return cell; 
} 
+0

@rmaddy Пожалуйста, помогите, как эта работа –

+1

Не полностью меняйте свой вопрос после публикации ответов. Это делает ответы бесполезными. – rmaddy

ответ

2

Ваш вопрос не ясен, но я думаю, что вы хотите, 7 строк в каждой секции кроме последней секции, которая будет иметь только достаточно для последних оставшихся строк, которые не помещаются в остальных разделах.

Предполагая, что это правильно нужно правильно рассчитать количество секций следующим образом:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return ceil(array.count/7.0); // round up the floating point division 
} 

Теперь количество строк в каждой секции будет 7 для последней секции, которая может иметь 1, за исключением - 7.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSInteger sections = [self numberOfSectionsInTableView:tableView]; 
    if (section == sections - 1) { 
     NSInteger count = array.count % 7; 
     if (count == 0) { 
      count = 7; 
     } 
     return count; 
    } else { 
     return 7; 
    } 
} 

Вы также должны быть в состоянии преобразовать indexPath в индекс массива:

NSInteger index = indexPath.section * 7 + indexPath.row; 

И вы должны быть в состоянии преобразовать индекс массива в indexPath:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index % 7 inSection:index/7]; 

Или, вместо всего этого, вы могли бы настроить ваши структуры данных, чтобы быть массивом массивов. Это фактически делает ваши данные более подходящими, как он будет использоваться таблицей.

Обновление для вас пересмотрела вопрос:

Ваш метод cellForRowAtIndexPath необходимо изменить:

//cell.textLabel.text = [tableData objectAtIndex:indexPath.row]; 

к:

NSInteger index = indexPath.section * 7 + indexPath.row; 
cell.textLabel.text = tableData[index]; 

так же, как я показал выше.

+1

Я уже говорил вам, как в строке кода я показал вам после метода tableView: numberOfRowsInSection:. – rmaddy

+1

BTW - была опечатка. Измените 'array.count и 7' на' array.count% 7'. – rmaddy

+0

во всех разделах сначала два элемента заполняют во всех разделах. –

1

Так что я не совсем нахожусь в объективе C, как это было некоторое время.

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

Вот немного psuedocode.

for(int i =0; i<array.length<i=i+7) 
{ 
    //take the first index, take the 7th index. 
    //split the array from the first index to the 7th 
    //repeat for all remaining values. 
} 

Я не уверен, хотели ли вы все различные разделы, которые он мог бы сделать из 7 интервалов, или только один. Если бы вы могли уточнить, я мог бы ответить на это лучше.

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