2013-06-20 2 views
0

Это скорее математическая проблема, чем что-либо еще. У меня есть объект динамического массива, в котором хранятся пользовательские фотографии.uitableview numberOfRowsInSection count

arryData = [[NSArray alloc] initWithObjects:@"pic1.png", @"pic2.png", @"pic3.png", @"pic4.png", @"pic5.png", @"pic6.png",@"pic7.png", @"pic8.png",nil]; 

Этот массив может иметь любое количество объектов в нем 8 или например 20 или 100. В моем представлении таблицы я создал 4 UIImageViews на строку, добавив их в cell.contentview. Так что, если позволяет говорить

  • если arryData имеет 3 объектов, то я хочу UITable создать 1 строку
  • если arryData имеет 4 объекта, то я хочу UITable создать 1 строку
  • если arryData имеет 5 объектов, то я хочу UITable создать 2 строки
  • если arryData имеет 8 объектов, то я хочу, чтобы создать UITable 2 строки
  • если arryData имеет 10 объектов, то я хочу UITable создать 3 строки
  • .... и так далее

Итак, как мне это сделать для N числа объектов в моей arryData?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

     //NSLog(@"Inside numberOfRowsInSection"); 
     //return [arryData count]; 

//Cannot think of a logic to use here? I thought about dividing [arryData count]/4 but that will give me fractions 

    } 

Изображение стоит тысячи слов.

enter image description here

ответ

5

Итак, в основном вам нужно разделить на четыре, округляя вверх. Так как целочисленное деление в Objective-C усекает (округление к нулю), вы можете округлить, делая это:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return (arryData.count + 3)/4; 
} 

В общем, сделать целочисленное деление (с положительными целыми числами) округлить, добавить знаменатель-1 до числителя перед делением.

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

static const int kImagesPerRow = 4; 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return (arryData.count + kImagesPerRow - 1)/kImagesPerRow; 
} 
+1

Ну это действительно приятно :). – danypata

+0

Вау, спасибо. Поистине поразила ваше математическое уравнение! :) –

0

Я полагаю, у вас есть только один раздел так:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSInteger photoNumber = [yourDataSource count]; 
    if(photoNumber % numberOfPhotosOnRow == 0) { 
     return photoNumber/numberOfPhotosOnRow; 
    } 
    else { 
     return photoNumber/numberOfPhotosOnRow + 1; 
    } 
} 
1

Для подсчета строк, разделить на количество изображений и округлить:

rowCount = ceilf([arryData count]/4.0); 
+1

Нет смысла использовать 'ceilf' (' float') функцию, когда вы делите '4.0' (' double'). Либо разделите на '4.0f', либо используйте' ceil'. –

0

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

if (tableView == yourTableView) 
    { 
     int rows = [yourArray count]; 

     int rowsToReturn = rows/4; 
     int remainder = rows % 4; 
     if (rows == 0) { 
      return 0; 
     } 
     if (rowsToReturn >0) 
     { 
      if (remainder >0) 
      { 
       return rowsToReturn + 1; 
      } 
      return rowsToReturn ; 

     } 
     else 
      return 1; 

    }`