【问题标题】:How to programmatically select a row in a table如何以编程方式选择表格中的一行
【发布时间】:2012-02-16 08:17:32
【问题描述】:

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

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

在 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。

【问题讨论】:

  • 欢迎来到 StackOverflow!请记住阅读常见问题解答,并在点击提交按钮之前检查您帖子中的代码格式。
  • 您提供的代码不起作用的唯一原因(假设索引路径正确)是您的表格视图为零。
  • 假设您在实际代码中也纠正了拼写错误。
  • 这一行本身就足以选择一行并滚动到它[myTableView selectRowAtIndexPath:rowToSelect animated:YES scrollPosition:UITableViewScrollPositionMiddle]; 如果这一行没有这样做,那么发布这个语句的结果NSLog(@"myTableView = %@ / rowToSelect = %@",myTableView,rowToSelect);
  • 我的直觉是这条线确实足够了。但是 rowtoSelect 不是整数,它是一个 NSIndexPath ,我想我必须实现它。不过,除了数字之外,还有什么可以作为参数 rowToSelect 给出的??

标签: ios uitableview select random row


【解决方案1】:

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

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

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

例子:

-(void)yourSelector
{
…
    UI changes
…
}

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

【讨论】:

  • 这与他正在做的事情没有任何关系。该表必须为零。
  • 为什么不相关?他生成随机行并想选择一个。如果表格为零,则无法选择任何内容:)
  • 很好,它有一些相关性:) 但是这种方法过于复杂。只需从主线程调用yourSelector
  • 这完成了正确设置索引路径的工作。 (randomrij 是 randomrow,eentabelview 是 atableview) NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:randomRij inSection:0]; [[self eenTabelView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionNone 动画:NO];视图中仍然没有任何变化,该行没有被激活。是否应该有额外的代码来实现它,或者这里给出的这两行代码有什么问题。例如,是否存在多个 NSindexPath,我是否为随机行设置了一些虚拟 IndexPath。
【解决方案2】:

这就是我让它工作的方式。我保留了以下行:

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

我添加了以下几行:

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

我评论了以下行:

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

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 2020-09-02
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多