Отмена выбора строки представления таблицы при возврате - PullRequest
32 голосов
/ 20 октября 2010

Я последовал предложению Люка Редпата здесь - Выбранный UItableViewCell остается синим при выборе - чтобы отменить выбор строки при возврате к исходному табличному виду, но я не могу заставить его работать. На самом деле метод не срабатывает.

- (void)viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];
  [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}

Я подозреваю, что это потому, что класс не UITableViewController, а UIViewController с tableView в качестве свойства, связанного с NIB.

Как бы я поступил так же, то есть отменил выбор при возврате?

Ответы [ 7 ]

21 голосов
/ 17 мая 2012

почему вы просто не отмените выбор в методе делегата

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];

}
16 голосов
/ 20 октября 2010

Если вы используете NavigationController, вы можете сделать это с его делегатом:

- (void)navigationController: (UINavigationController *)navigationController
       didShowViewController: (UIViewController *)viewController
                    animated: (BOOL)animated
{
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}

Но вы должны проверить, какой контроллер шоу вам нужен = /

[EDIT] Создайте розетку и свяжите ее в IB с NavigationController

@interface MyInt <UINavigationControllerDelegate>
{
    IBOutlet UINavigationController *navigation;
    ...
}
@property (nonatomic, retain) UINavigationController *navigation;
...
@end

@implementation MyInt
@syntesize navigation;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.navigation setDelegate: self];
}
...

@end
8 голосов
/ 11 декабря 2012

У меня та же проблема, но после отладки я обнаружил, что счетчик indexPathForSelectedRow был равен 0, поэтому я дважды проверил свой код и заметил, что я звоню

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // some code...
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

После удаления этой строки она просто заработала как ожидалось.

8 голосов
/ 03 декабря 2010

Вы выбираете строку программно?Если это так, у меня возникла та же проблема при выборе строки с помощью [cellToBeSelected setSelected:YES];.

При использовании метода UITableViewController selectRowAtIndexPath:animated:scrollPosition: он отслеживал текущий выбранный indexPath.

Фактически, если для clearsSelectionOnViewWillAppear установлено значение true, строки не отменяются вручную.

4 голосов
/ 12 февраля 2014

Очень просто: Попробуйте эту строку.

Добавьте deselectRowAtIndexPath в свой didSelectRowAtIndexPath

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

}
2 голосов
/ 26 апреля 2017

Swift 3.0

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            tableView.deselectRow(at: indexPath, animated: true)
    //Write Your Other code Here.
            }

После отмены выбора строки будет отменено.

0 голосов
/ 18 февраля 2016
-(BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:[UIColor grayColor]];
}

-(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:[UIColor clearColor]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...