如何以编程方式选择表中的行

时间:2012-01-22 19:21:04

标签: ios uitableview select random row

我有一张用户查看的表格。当用户摇动他的设备时,我想要选择一个随机行。我该怎么做?

我已经识别出摇动手势,我可以创建一个不超过列表计数的随机整数,但是我找不到正确的代码来在表格中突出显示该行。

在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 个答案:

答案 0 :(得分:5)

这就是我的工作方式。我保留了以下内容:

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

我添加了以下几行:

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

我评论了以下一行:

//[[self eenTabelView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];

答案 1 :(得分:0)

重要规则:所有UI更改必须在主线程中完成。 添加

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

在您的代码运行之前已经在主线程中运行OR(更正确的变体)将所有UI更改提取到单独的方法并在主线程中调用它。

示例:

-(void)yourSelector
{
…
    UI changes
…
}

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