Нет результатов - UITableView iPhone - PullRequest
9 голосов
/ 31 мая 2011

Я пытаюсь отобразить сообщение об отсутствии результатов в моем табличном представлении, когда оно пустое.Я применил метод uilabel, когда он появляется, когда он пуст, но кажется, что это не так, как Apple сделала это в Контактах и ​​т. Д., Где также перемещается «Нет результатов», когда вы пытаетесь прокрутить вверх и вниз.Моя просто остается там в одном месте.

Кто-нибудь знает, как это сделать?

Я думаю, что они добавили ячейку Нет результатов?

Ответы [ 5 ]

10 голосов
/ 31 мая 2011

Да. Если у вас нет результатов для отображения, выполните следующие действия:

  1. Создайте логический флаг с именем noResultsToDisplay или что-то еще.
  2. Если у вас нет результатов для отображения, установите noResultsToDisplay = YES, в противном случае установите NO.
  3. In numberOfRowsInSection , if (noResultsToDisplay) return 3;
  4. In cellForRowAtIndexPath , if (noResultsToDisplay && indexPath.row == 2) cell.textLabel.text = @"No Results";
3 голосов
/ 31 мая 2011
#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return 3;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...

    if (indexPath.row == 2) {
        cell.textLabel.text = @"Empty cell";
    }

    return cell;
}
0 голосов
/ 18 марта 2014
i have edited the accepted answer to be look like the no search results in tableView


    Create a boolean flag named noResultsToDisplay, or something else.
    1-If you have no results to display then set noResultsToDisplay = YES, set it to NO otherwise.
    2-(this step changed)In numberOfRowsInSection, if (noResultsToDisplay) return 1; 
// 1 returned not 3

   3-(this step changed) In cellForRowAtIndexPath, 

static NSString *CellIdentifier;
    if (noResultsToDisplay){
        CellIdentifier = @"Cell";
// in my case i use custom cell this step can be skipped if you use the default UITableViewCell
    }
    else{
       CellIdentifier = @"DocInqueryCell";
    }
 DocumentationInqueryCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// don't forgt to add cell in your storyboard with identifier Cell and class your custom class , again this step can be skipped if you use the default cell

then 
if (noResultsToDisplay) {
cell.textLabel.text = @"No Results";
}else{

do what you want in your custom cell

}
0 голосов
/ 02 марта 2014

Я решил эту проблему, сохранив представление метки с той же фермой, что и у таблицы, и поигрался с атрибутом «скрытый» метки и таблицы (всегда один - ДА, а другой - НЕТ).

0 голосов
/ 31 мая 2011

Два способа сделать это: либо сделать так, как вы предлагаете, создать «ячейку без результатов» и иметь состояние в вашем tableViewController, равное BOOL resultIsEmpty = YES.В cellForRowAtIndexPath вы сначала проверяете эту пустую BOOL и возвращаете только пустую ячейку, не забывайте также проверять в numberOfRowsInSection, чтобы вы могли возвращать 1 в случае пустого (в противном случае он, вероятно, вернет длину вашего модельного массива, который, конечно,0).

Другой способ - сделать вкладку в табличном представлении и разместить там свою метку.Это может быть сделано, потому что UITableView является подклассом UIScrollView.

self.tableView.contentInset = UIEdgeInsetsMake(heighOfNoResultLabel, 0, 0, 0);

Затем в "resultsDidLoad" или как называется ваш делегат для новых данных, вы проверяете, равен ли он 0, вставляете tableView и помещаетеярлык там.Если это не 0, установите для вставки значение

self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);

все 0.Вы можете анимировать это свойство, чтобы при отсутствии результатов табличное представление «прокручивалось» вниз, чтобы отобразить метку «Нет результатов».

Бот-решения действительны, я бы сказал, примерно с тем же объемом кода.,Разница, вероятно, в том, что вы можете сделать с этим потом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...