searchDisplayController: измените маркировать “No Results”

Хотя ответы здесь не являются «неправильными», я добавлю еще один: никогда не вносите изменения переменных среды в OS X, которые влияют на «все процессы», или даже вне оболочки, для всех процессов, выполняемых в интерактивном режиме заданным пользователь.

По моему опыту, глобальные изменения переменных среды, таких как PATH, для всех процессов даже более вероятны для OS X, чем для Windows. Причиной этого является то, что многие приложения OS X и другое программное обеспечение (включая, возможно, особенно компоненты самой ОС) полагаются на инструменты командной строки UNIX изнутри и принимают поведение версий этих инструментов, поставляемых с системой, и при этом не обязательно использовать абсолютные пути (аналогичные комментарии применяются к динамически загружаемым библиотекам и переменным окружения DYLD_ *). Предположим, например, что наиболее высоко оцененные ответы на различные вопросы о переполнении стека о замене предоставленных OS X версий интерпретаторов, таких как Python и Ruby, обычно говорят «не делайте этого».

OS X на самом деле нет в этом отношении отличается от других UNIX-подобных операционных систем (например, Linux, FreeBSD и Solaris); наиболее вероятная причина, по которой Apple не предоставляет простой способ сделать это, заключается в том, что она ломает вещи . В той степени, в которой Windows не так подвержена этим проблемам, это связано с двумя причинами: (1) программное обеспечение Windows не склонно полагаться на инструменты командной строки, как это делает программное обеспечение UNIX, и (2) Microsoft имела такая обширная история как «ада DLL», так и проблем безопасности, вызванных изменениями, которые влияют на все процессы, что они изменили поведение динамической загрузки в более новых версиях Windows, чтобы ограничить влияние «глобальных» параметров конфигурации, таких как PATH.

«Хромая» или нет, у вас будет гораздо более стабильная система, если вы ограничите такие изменения меньшими областями.

7
задан Stefan 22 July 2009 в 13:27
поделиться

2 ответа

Это недоступно напрямую, поэтому вам придется сделать это старомодным способом и вручную просеять подпредставления вашего searchDisplayController.searchResultsTableView . Вот один пример:

UITableView *tableView = self.searchDisplayController.searchResultsTableView;
for( UIView *subview in tableView.subviews ) {
     if( [subview class] == [UILabel class] ) {
         UILabel *lbl = (UILabel*)subview; // sv changed to subview.
         lbl.text = @"My custom string";
     }
}

Я бы не рекомендовал это, так как вы полагаетесь на внутреннее поведение searchResultsTableView , которое более чем вероятно изменится в какой-то момент, нарушив работу вашего приложения. Отправьте запрос об ошибке / функции в Apple.

11
ответ дан 6 December 2019 в 07:07
поделиться

Я успешно удалил метку, так как никогда не имел пустого набора результатов.

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

Кроме того, используйте логику для повторного использования, чтобы выбрать «фиктивную» ячейку:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *listItem = [self.filteredListContent objectAtIndex:indexPath.row];
    if ([listItem isEqualToString:@""]) {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
}

Я также счел необходимым добавить логику «фиктивной» ячейки в метод делегата willSelect :

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *listItem = [self.filteredListContent objectAtIndex:indexPath.row];
    if ([listItem isEqualToString:@""]) {
        return nil;
    }
    return indexPath;
}
14
ответ дан 6 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: