Прокрутка таблицы без уведомления пользователя - PullRequest
0 голосов
/ 18 декабря 2009

Мне нужно прокрутить таблицу при начальной загрузке моего RootController. Проблема заключается в том, что мне нужно подождать, пока cellForRowAtIndexPath завершится, прежде чем я смогу что-либо сделать, используя scrollToRowAtIndexPath. cellForRowAtIndexPath, похоже, является последним событием, к которому я должен подключиться после загрузки таблицы. Поскольку представление уже загружено, таблица видна и, следовательно, прокрутка видна. Мне нужен какой-то способ заставить таблицу загружаться, прокручиваться и исчезать или что-то в этом роде, чтобы она не просто появлялась.

Цель состоит в том, чтобы табличное представление находилось в пятой строке, когда первоначально отображается табличное представление. Я, конечно, могу сделать это сейчас, но пользователь видит действие прокрутки. Действие прокрутки - это то, что я хочу скрыть при начальной загрузке представления.

У меня есть переменная уровня класса для отслеживания последнего индекса в cellForRowAtIndexPath, поэтому я не запускаю scrollToRowAtIndexPath для каждой итерации cellForRowAtIndexPath.

Любые другие предложения о том, как это сделать, приветствуются.

Ответы [ 3 ]

2 голосов
/ 19 декабря 2009

Попробуйте переопределить viewWillAppear в контроллере вида и настройте свой вид там. Это вызывается после инициализации вашего представления, но до его отображения. Обратите внимание, что это вызывается каждый раз, когда отображается представление (включая обратную навигацию или закрытие модального всплывающего окна), поэтому, если вы хотите прокручивать только самый первый раз, когда создается представление, вам может понадобиться флаг, например пример кода ниже.

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear: animated];

  if (!alreadyDisplayed) {
    // now scroll to the right row
    [self.tableView 
       scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 5 inSection: 0] 
       atScrollPosition: UITableViewScrollPositionTop animated: NO];

    alreadyDisplayed = true;
  }
}
1 голос
/ 19 декабря 2009

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

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {



        if(!firstTime){
            [NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
        }

    }


- (void) timerFired:(NSTimer *)aTimer{
    firstTime = YES;
    [aTimer invalidate];
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0]-1) inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}

Надеюсь, это поможет.

0 голосов
/ 18 декабря 2009

Я не знаю, если это то, что вы ищете, и, возможно, я не понимаю ваши намерения, но здесь идет речь:

Если это cellForRow ... вы думаете, что вам нужно подключиться, очевидно, он будет вызываться несколько раз, и вам нужно будет знать, когда он вызывался в последний раз (табличное представление будет вызывать его для все видимые строки и, возможно, одна или две строки за пределами рамки просмотра). В конце каждого вызова этого метода запускайте отложенный вызов метода (выполняйте бла-бла с задержкой), но в начале метода cellForRow ... отмените это отложенное выполнение. Таким образом, когда метод был вызван в последний раз для начальной загрузки ячеек таблицы, у вас будет отложенный вызов вашего вспомогательного метода, который будет прокручивать вашу таблицу и т. Д.

Я полагаю, что myTableView.hidden = YES для запуска было бы полезно, а после завершения прокрутки установите значение "NO". Проблема скрыта = ДА не влияет на просмотр таблицы. Это подключенный IBOutlet.

Скорее всего, вы захотите установить свойство класса в viewWillAppear (или didAppear), чтобы указать, хотите ли вы выполнить действие отложенной прокрутки, и очистить его после выполнения прокрутки.

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