it-swarm.com.ru

Отмена выбора строки представления таблицы при возврате

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

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

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

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

32
cannyboy

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

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

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

}
21
ahmad

Если вы используете 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
16
grilix

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

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

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

8
Alexander Wallin

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

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

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

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

8
FrankWest

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

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

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

}
4
svmrajesh

Swift 3.0

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

Он отменит выбор строки после нажатия на нее.

2
Dhruv Khatri
-(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]];
}
0
Ranjeet Singh