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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

}

Ответ 2

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

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

Но вы должны проверить, есть ли диспетчер show, который вы хотите =/

[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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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

}

Ответ 6

Swift 3.0

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

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

Ответ 7

-(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]];
}