Подтвердить что ты не робот

Как запоминать выбранные строки и поддерживать их после перезагрузки по умолчанию в UITableView?

Как установить строку, выбранную по умолчанию? Я хочу выбрать строку, взять число выбранной строки с помощью indexpath.row, а затем перезагрузить таблицу и выбрать строку, которая была выбрана. Может кто-то мне помочь, пожалуйста? Могу ли я получить выбранную строку в методе - (IBAction) segmentedControlIndexChanged? Не в didSelectRowAtIndexPath?

Это мой код, если он может помочь вам понять

- (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];
    }
    //lbl1 = [[UILabel alloc]initWithFrame:CGRectMake(200, 10, 100, 20) ];

    // Configure the cell...
    NSString *depdateChoosed=[deparatureDates objectAtIndex:depSelectedIndice];
    NSString *comeateChoosed=[deparatureDates objectAtIndex:comSelectedIndice];
    NSString *choosedDate =[NSString stringWithFormat:@"%@%@",depdateChoosed, comeateChoosed];
    NSLog(@"date choisi %@ ",choosedDate);

    if(segment.selectedSegmentIndex==0)
    {
        cell.textLabel.text =[deparatureDates objectAtIndex:indexPath.row];        
    }
    else if(segment.selectedSegmentIndex==1) {
         //cell.textLabel.text =[goingBackDates objectAtIndex:indexPath.row];
        //cell.textLabel.text=[goingBackDates objectAtIndex:indexPath.row];
        cell.textLabel.text =[goingBackDates objectAtIndex:indexPath.row];
    }
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@" champ séléctionner : %d ",indexPath.row);

    if(segment.selectedSegmentIndex==0)
    {
        depSelectedIndice=indexPath.row;  
    }
    else if(segment.selectedSegmentIndex==1) {
        comSelectedIndice=indexPath.row;
    }
    //[tableView reloadData];
}

-(IBAction) segmentedControlIndexChanged
{
    int i;
    switch (self.segment.selectedSegmentIndex) 
    {
        case 0:
            i=0;

            [tableView reloadData];
            break;
        case 1:
            i=1;
            NSLog(@"dexieme segment selectionner");
            [tableView reloadData];
        default:
            break;
    }
}
4b9b3361

Ответ 1

NSIndexPath *indexPath = [tableView indexPathForSelectedRow];

предоставит вам NSIndexPath для текущей выбранной строки. Затем вы можете сделать

[tableView selectRowAtIndexPath:indexPath 
                       animated:NO 
                 scrollPosition:UITableViewScrollPositionMiddle];

чтобы выбрать эту строку (и показать ее в середине экрана) позже.

Ответ 2

У меня был тот же вопрос, и вот как я это сделал:

В вашем tableViewController добавьте это в эту функцию

(UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{    
    if(indexPath.row == 'the row you want to select')
    {
        [tableView 
            selectRowAtIndexPath:indexPath 
            animated:TRUE 
            scrollPosition:UITableViewScrollPositionNone
        ];

        [[tableView delegate] 
            tableView:tableView 
            didSelectRowAtIndexPath:indexPath
        ];

    }

}

Ответ 3

Это будет сделано:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];

Где строка - номер ячейки, которую вы хотите выбрать (начинается 0...), а раздел - это раздел, в котором отображается ячейка.

Ответ 4

Вот как вы выбираете строку в UITableView:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];

Установите indexPath как выбранную строку, а затем вызовите вызов метода, как указано выше.

Ответ 5

Я понимаю, что этот вопрос довольно старый (2011), но просто для того, чтобы также опубликовать обновленный ответ, если кто-то (например, я) ищет эту проблему и спотыкается по этому вопросу:

В iOS 9 Apple значительно улучшила UITableView. Чтобы убедиться, что фокус не потерян при перезагрузке таблицы, просто выполните следующее:

tableView.remembersLastFocusedIndexPath = Yes;

и он будет "волшебным образом работать".

Еще лучше, реализуйте

- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView

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

Перед iOS 9 я обычно просто писал свой собственный метод reloadData, который получает текущую выбранную строку, перезагружает таблицу и затем снова ее выбирает. Либо в UITableViewController, либо если мне нужно, чтобы работать со столом, где я не мог напрямую запретить вызов кода reloadData, я подклассифицировал UITableView и переопределял reloadData (привет, делегирование - это предпочтительный путь, но иногда вы просто для подкласса и переопределения, даже в iOS).

Ответ 6

Используйте следующий код, чтобы получить выбранные строки в представлении таблицы.:)

NSArray *selectedRows=[tableView indexPathsForSelectedRows];
        NSMutableArray *rownumberArray=[[NSMutableArray alloc]init];
        for (int i=0; i<selectedRows.count; i++) {
            NSIndexPath *indexPath = [selectedRows objectAtIndex:i];
            NSInteger row = indexPath.row;
            NSNumber *number = [NSNumber numberWithInteger:row];
            [rownumberArray addObject:number];
        }

//rownumberArray содержит номера строк для выбранных ячеек.