Как использовать раскадровку динамических прототипов TableViewCell для форматирования результатов SearchDisplayController - PullRequest
2 голосов
/ 19 февраля 2012

Я создал подкласс TableViewController и использовал его с раскадровкой. Я создал 1 динамический прототип и использовал его значение идентификатора в подклассе. Он работает и отображает ячейки, как показано на раскадровке. Но когда я добавил searchDisplayController и сделал TableViewController делегатом и источником данных, он отображает правильные результаты поиска, но формат TableViewCells больше не соответствует прототипу раскадровки. Код, который я использовал ниже. Как я могу заставить его следовать прототипу?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Contact Cell";
    static NSString *sCellID = @"Contact Cell";
    UITableViewCell *cell;
        if (tableView == self.searchDisplayController.searchResultsTableView) {
            cell = [tableView dequeueReusableCellWithIdentifier:sCellID];
            if (cell == nil) 
            {            
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:sCellID];
            }
        }
        else
        {
            cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            if (cell == nil) 
            {            
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
        }


    // ask NSFetchedResultsController for the NSMO at the row in question
    Contact *contact = [self.fetchedResultsController objectAtIndexPath:indexPath];
    // Then configure the cell using it ...
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.imageView.image = [UIImage imageNamed:@"1234_profile.png"];
    cell.textLabel.text = [contact.lastName stringByAppendingFormat:@", %@",contact.firstName];
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@, %@", contact.occupation, contact.companyName];

    return cell;
}

Ответы [ 2 ]

5 голосов
/ 30 мая 2012

используйте

cell = [self.tableView dequeueReusableCellWithIdentifier:sCellID];

вместо

cell = [tableView dequeueReusableCellWithIdentifier:sCellID];

Затем используется прототип ячейки раскадровки.

1 голос
/ 20 февраля 2012

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

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

...