UISearchbar с UIStoryboard: сегменты и пользовательские ячейки не работают правильно - PullRequest
3 голосов
/ 13 февраля 2012

Я использую раскадровки и хочу реализовать панель UISearch для моего UITableView. UISearchbarController генерирует новый UITableView, и я использую следующую стратегию:

if (tableView == self.tableView)
   //Populate table view with normal data
else
   //Populate table view with search data

Первая проблема заключается в работе с пользовательскими ячейками. Я должен создать их экземпляр в cellForRowAtIndexPath. Обычно вы делаете это из файла пера. Как мне сделать это с раскадровками? dequeueReusableCellWithIdentifier возвращает ноль.

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

Может ли кто-нибудь помочь, пожалуйста? Спасибо!

Ответы [ 3 ]

6 голосов
/ 23 июня 2012

Что касается первой проблемы, я решил ее, изменив тип ViewController с UITableViewController на UIViewController, затем добавив в него табличное представление и добавив IBOutlet для табличного представления

@property (strong, nonatomic) IBOutlet UITableView *_tableView;

используйте выход для снятия ячейки с таблицы

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *cell=[_tableView dequeueReusableCellWithIdentifier:productMasterCellIdentifier];
    // .. modify your cell
    return cell;
}
1 голос
/ 13 марта 2012

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([tableView isEqual:self.searchDisplayController.searchResultsTableView]) {
        [self performSegueWithIdentifier:@"fromSearchResults" sender:self];
    }
    else {
        [self performSegueWithIdentifier:@"fromAll" sender:self];
    }
}  

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"fromSearchResults"]) {
        ..........
        ..........
    }
    else {
        ..........
        ..........
    }
}
0 голосов
/ 14 февраля 2012

Итак, вот что я сделал:

1) Я инициализировал пользовательские ячейки в initWithStyle: reuseIdentifier:, затем реализовал макет в layoutSubviews.Поэтому я до сих пор не знаю, как загрузить ячейки из раскадровок.

2) Я выдвинул представление в стеке навигации вместо использования сегментов раскадровки.

...