Первый элемент NSArray - PullRequest
       8

Первый элемент NSArray

1 голос
/ 27 марта 2012

У меня есть интересная проблема:

У меня есть NSArray, который заполнен именем некоторых животных (строки).И я использую этот массив для заполнения UITableView. Когда вы нажимаете на любое cell (животное), вы переходите в подробный вид и читаете больше об этом животном.Затем я улучшил свое приложение, и теперь в UITableView первая ячейка - это ячейка, в которой просто указано, сколько животных в UITableView.Это как:

Найдено животных: 4 (первая клетка)

  • Собака (вторая клетка)
  • Кошка (третья клетка и т. Д.)
  • Хомяк
  • Змея

Проблема в том, что при нажатии на первую ячейку (Найдено животных: 4) вы перемещаетесь в подробном представлении случайного животного.Это происходит потому, что в массиве в index 0 есть животное.Поэтому вы перемещаетесь в подробном представлении этого животного.Я не хочу ничего делать, когда пользователь нажимает первую ячейку.Как я могу добраться до него?

Ответы [ 4 ]

4 голосов
/ 27 марта 2012

В методе didSelectRowAtIndexPath вашего табличного представления, если строка предоставленного параметра indexPath равна нулю, просто вернитесь.И если оно больше нуля, вычтите из него единицу, и это станет индексом массива отображаемого элемента.Как то так:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tv deselectRowAtIndexPath:[tv indexPathForSelectedRow] animated:YES];

    int idx = [indexPath row];
    if (idx == 0)
    {
        return;
    }

    idx--;
    // use idx as the index into your array of animals as you did initially
}
2 голосов
/ 27 марта 2012

На основе условия indexPath.row (в вашем случае оно должно быть равно нулю)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

но этот метод все равно будет вызывать didSelectRowAtIndexPath, поэтому вам нужно сделать следующее

cell.userInteractionEnabled = NO;

1 голос
/ 27 марта 2012

Я думаю, что лучшим решением будет представить в вашей модели то, что вы хотите видеть в своих представлениях. Поэтому я бы сделал это так:

myModel = [NSMutableArray arrayWithObjects:@"3 animals", @"dog", @"cat", @"chicken", nil];
// here, wherever else my model is altered:
[myModel replaceObjectAtIndex:0 withObject:[NSString stringWithFormat:@"%d animals", myModel.count-1]];

Теперь никакая специальная логика не требуется нигде, кроме как, как рекомендует @ Praveen-K при настройке ячейки в indexPath.row = 0 ...

cell.userInteractionEnabled = NO;
0 голосов
/ 27 марта 2012

Попробуйте это ......

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
   if (indexPath.row ==0)
       {
        //Select first Row;
       }
    else
        {
         //Do What you Want
        }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...