Отмена выбора строки таблицы при возврате
Я последовал за предложением Luke Redpath здесь - Выбранный UItableViewCell остается синим при выборе - чтобы отменить выбор строки при возврате в исходное представление таблицы, но я не могу ее получить за работой. На самом деле метод не запускается.
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Я подозреваю, что это потому, что класс не является UITableViewController
, а a UIViewController
с tableView
как свойство, связанное с NIB.
Как мне получить то же поведение, то есть отменить выбор при возврате?
Ответы
Ответ 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]];
}