2013-12-03 5 views
0

У меня есть пользовательский UITableViewCell, который я использую в своем TableView, но я хочу, чтобы между каждой ячейкой было расстояние. Информация, которая попадает в ячейку, захватывается из моей базы данных (я использую Parse), поэтому каждый раз она различна. Я нашел это большое решение SO здесь: Spacing between cells on UITableView with Custom UITableViewCellИнтервал/поля между ячейками в UITableView с пользовательским UITableViewCell

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

Вот мой код:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row % 2 == 1) 
     return 40; 
    return 73; 

    //return 73; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object { 

    //Begin 
    static NSString *CELL_ID2 = @"SOME_STUPID_ID2"; 
    // even rows will be invisible 
    if (indexPath.row % 2 == 1) 
    { 
     UITableViewCell * cell2 = [tableView dequeueReusableCellWithIdentifier:CELL_ID2]; 

     if (cell2 == nil) 
     { 
      cell2 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:CELL_ID2]; 
      [cell2.contentView setAlpha:0]; 
      [cell2 setUserInteractionEnabled:NO]; // prevent selection and other stuff 
     } 
     return cell2; 
    } 

    //End 

    static NSString *CellIdentifier = @"debateCell"; 

    RipDebateTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) 
    { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"RipDebateTableCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
    } 



    // Configure the cell 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    //[df setLocale:enUSPOSIXLocale]; 
    [df setTimeZone:[NSTimeZone systemTimeZone]]; 
    [df setDateFormat:@"MMM dd, yyyy "]; 
    NSString *my = [df stringFromDate:[object objectForKey:@"Date"]]; 
    NSLog(@"%@", my); 
    tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0); 
    cell.titleOf.text = [object objectForKey:@"Topic"]; 
    cell.dateOf.text = [NSString stringWithFormat:@"Date: %@", my]; 
    cell.typeOf.text = @"Debate"; 
    cell.cellTop.image = [UIImage imageNamed:@"table-top"]; 
    //cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    //cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    return cell; 
} 

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

EDIT: Вот код, который извлекает данные

- (PFQuery *)queryForTable { 
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; 
    //query whereKey:@"school" equalTo:[PFUser curr] 
    [query whereKey:@"school" equalTo:[[PFUser currentUser]objectForKey:@"mySchool"]]; 
    // If no objects are loaded in memory, we look to the cache first to fill the table 
    // and then subsequently do a query against the network. 
    if ([self.objects count] == 0) { 
     //[query whereKey:@"providerZipCode" equalTo:[NSNumber numberWithInt:78664]]; 
     NSLog(@"NONE"); 
     query.cachePolicy = kPFCachePolicyCacheThenNetwork; 
    } 

    [query orderByAscending:@"Date"]; 

    return query; 
} 

Этот запрос добавляет объекты в self.objects, массив.

Если до сих пор неясно, вот ссылка на документы PARSE о контроллере представления: https://parse.com/docs/ios_guide#ui-tables/iOS

+0

и хотите только нечетные строки хочет, чтобы заполнить данные, где, как эвены оставлены пустые .. –

+0

справа, четные строки являются поля между нечетными строками, чтобы сделать его похожим на есть расстояние. Моя проблема в том, что мой код выше не отображает все в массиве объектов ... Каждый раз, когда вызывается cellForRowAtIndexPath, в метод отправляется PFObject, поэтому, когда это четная строка, этот объект игнорируется, и ничего не происходит с Это. – Jacob

+0

этот метод вызывает один раз в строке, так как вы знаете, thats wy не хватает данных в tableview, ya, поскольку rdelmar сказал, что u может поместить пустой headerview для каждой строки. –

ответ

0

Вы можете вернуться в 2 раза количество вашего массива (в numberOfRowsInSection), и сделать что-то подобное в cellForRowAtIndexPath :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row % 2 == 1) { 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DataCell" forIndexPath:indexPath]; 
     cell.textLabel.text = self.theData[(indexPath.row -1)/2]; 
     return cell; 
    }else{ 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SpacerCell" forIndexPath:indexPath]; 
     return cell; 
    } 
} 
+0

. У моего метода cellForRowAtIndexPath уже есть объект для этой ячейки, отправленный с помощью метода. Другими словами, каждая ячейка предварительно назначает объект в массиве self.objects. Я использую подкласс PFQueryTableViewController parse. – Jacob

+0

@ user2584268, я не понимаю ваш комментарий. Код, который я опубликовал, будет иметь доступ к каждому элементу вашего массива в части if. Вы говорите, что у вас есть массив, объекты, но я не понимаю, как вы его используете. – rdelmar

+0

извините за путаницу. Если вы посмотрите на мой заголовок метода: - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) объект indexPath: (PFObject *) object {в нем уже есть объект, который я использую для заполнения информация каждой ячейки. – Jacob

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