即使表格大于视图,TableViewController也不会闪烁滚动指示器

时间:2010-07-19 14:21:24

标签: iphone sdk scrollbar tableview indicator

我对TableViewController有一个奇怪的问题。 在doc中,它表示tableViewController也处理该方法  当表格“超大”时,-flashScrollIndicators尊重可见区域。

我的应用包含3个导航控制器,加载在标签控制器中。每个导航控制器都具有作为根视图控制器的表视图控制器的子类。 每个“模型”都从plist文件中填充,该文件将其内容加载到-viewDIdLoad中的数组中,稍后将所有内容传递给表。一切都是以编程方式加载的,没有IB。

我在我的应用程序中发现,当它加载第一个视图(一个带有表视图控制器的导航控制器作为root)时,即使单元格的数量足够大,滚动条也不会闪烁。 如果我选择另一个选项卡,则会加载另一个导航控制器(以t.v.c.为根)滚动条不再显示。当我按下与第一个导航控制器相对应的标签时,滚动条会闪烁。

所以我试图以编程方式进行闪存,但没办法,代码看起来很简单:

[self.tableView flashScrollIndicators];

我试着把它放在几乎所有地方。首先在-viewDidLoad中(如文档中所示),然后在viewDidAppear和-viewWillAppear中。 还尝试使用该代码来转换t.v.c的视图。作为表格视图。

[((UITableView*)self.view) flashScrollIndicators];

..没有结果。

我已经开始查看Apple示例了,我发现在Apple的表视图中,自定义示例(具有不同时间的示例)滚动条也不会闪烁。 在sim和设备上进行了测试。

是一个错误?,是否有正确的方式以编程方式显示它? 有人能帮我吗? 问候, 安德烈

4 个答案:

答案 0 :(得分:41)

或者更简洁:

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [self.tableView performSelector:@selector(flashScrollIndicators) withObject:nil afterDelay:0];
}

答案 1 :(得分:12)

我有完全相同的问题。我最后通过在viewDidAppear:方法中放入一个延迟选择器来解决它。奇怪的是,我可以将它设置为0秒,它仍然可以正常工作。

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

    [self performSelector:@selector(flashTableScrollIndicators) withObject:nil afterDelay:0.0];
}

- (void)flashTableScrollIndicators
{
    [self.tableView flashScrollIndicators];
}

答案 2 :(得分:3)

显示部分索引标题时不会显示。

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; 

答案 3 :(得分:0)

我的解决方案是发送" flashScrollIndicators()"使用" dispatch_after":

稍有延迟的消息
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.4 * Double(NSEC_PER_SEC)))

dispatch_after(delayTime, dispatch_get_main_queue(), 
{ () -> Void in 
    myScrollView.flashScrollIndicators() 
})