Как программно выбрать строку в таблице - PullRequest
4 голосов
/ 22 января 2012

У меня есть таблица, которую просматривает пользователь. Когда пользователь встряхивает свое устройство, я хочу выбрать случайную строку. Как мне это сделать?

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

В документации Apple я нашел:

NSIndexPath *rowToSelect;  // assume this exists and is set properly
UITableView *myTableView;  // assume this exists

[myTableView selectRowAtIndexPath:rowToSelect animated:YES scrollPosition:UITableViewScrollPositionNone;
[myTableView scrollToRowAtIndexPath:rowToSelect atScrollPosition:UITableViewScrollPositionNon animate:YES];

но я не могу заставить его работать. У меня есть UITableView *myTableView. Я использовал случайное целое число как rowToSelect.

Ответы [ 2 ]

5 голосов
/ 27 января 2012

Вот так у меня все получилось. Я сохранил следующую строку:

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:randomRij inSection:0];

Я добавил следующие строки:

[eenTabelView selectRowAtIndexPath:scrollIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

Я прокомментировал следующую строку:

//[[self eenTabelView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
0 голосов
/ 23 января 2012

Важное правило: все изменения пользовательского интерфейса должны выполняться в основном потоке. Добавить

if (![NSThread isMainThread])
{
    [self performSelectorOnMainThread:_cmd withObject:(%YOUR_OBJECT_TAKEN_IN_THIS_SELECTOR) waitUntilDone:Yes];
}

перед тем, как ваш код запустит его уже в основном потоке ИЛИ (более правильный вариант), извлеките все изменения пользовательского интерфейса в отдельный метод и вызовите его в основном потоке.

Пример:

-(void)yourSelector
{
…
    UI changes
…
}

-(IBOutlet)yourAction
{
    [self performSelectorOnMainThread:@selector(yourSelector) withObject:nil waitUntilDone:Yes];
}
...