iPhone: deselectRowAtIndexPath после перезагрузки - PullRequest
1 голос
/ 25 августа 2011

В моем стеке навигации есть 2 вида View1 и View2.View1 является tableView.Итак, что я пытаюсь сделать, это deselectRow when I come back from View2 to View1`.Это прекрасно работает, если просто сделать так:

- (void)viewWillAppear:(BOOL)animated {
    NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView deselectRowAtIndexPath:myIP animated:NO];

}

Но мне также нужно перезагрузить эту строку.Но если вызвать reload, deselect не работает:

- (void)viewWillAppear:(BOOL)animated {
     self.navigationController.navigationBarHidden = NO;

     NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0];
     [self.tableView deselectRowAtIndexPath:myIP animated:NO];
     [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:myIP] withRowAnimation:UITableViewRowAnimationNone];   
}

Я также попытался select строка и deselect это, это работает, но проблема в том, что я открываю View1 вв первый раз или из другого вида я вижу отмену выбора анимации

- (void)viewWillAppear:(BOOL)animated {
self.navigationController.navigationBarHidden = NO;

NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0];

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:myIP] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView selectRowAtIndexPath:myIP animated:NO scrollPosition:UITableViewScrollPositionNone];
[self.tableView deselectRowAtIndexPath:myIP animated:NO];

}

Есть предложения?Заранее спасибо ...

Ответы [ 3 ]

0 голосов
/ 25 августа 2011

Обычно при переходе от одного представления к другому, если первое представление является табличным, в исходном представлении таблицы будет метод "didSelectRowAtIndexPath:", в рамках этого метода мы будем вызывать классы, а при вызове существует два типа 1.Использование PresentModalViewController - это будет похоже на навигацию, а с помощью кнопки назад можно вызвать первый вид.2. Используя PushViewController -it будет просто переходить к следующему представлению, и для возврата к тому же представлению мы должны снова добавить кнопку IBACTION и использовать модальный viewcontroller dismiss.

Это методы для перемещения между двумя представлениями....

0 голосов
/ 25 августа 2011

Я согласен, что отмена выбора строки перед переходом к следующему представлению звучит как ваш лучший вариант, однако я обнаружил, что лучше отменить выбор строки в методе viewDidDisappear, например:

- (void)viewDidDisappear:(BOOL)animated
{
    NSIndexPath *selected = [self.tableView indexPathForSelectedRow];
    if ( selected ) [self.tableView deselectRowAtIndexPath:selected animated:NO];

    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

Последние две строки этого кода помогут, если вы изменяете любое форматирование в ячейках, когда они выделены, например, при изменении высоты строки. Если форматирование остается одинаковым для выбранных / невыбранных строк, вы можете игнорировать эти две строки.

0 голосов
/ 25 августа 2011

Не могли бы вы отменить выбор строки в didSelectRowAtIndexPath: (для view1) перед тем, как перейти к новому представлению? Таким образом, вам не нужно беспокоиться об отмене выбора по возвращении. Это то, что я обычно делаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...