1

我有一个 tableviewcontroller,特别是在我的应用程序中,滚动时有点紧张。

我相当肯定这是因为我的自定义 UISegmentedControl 外观,我的表中有四个,每个都在自己的单元格中。

我在我的应用程序委托中使用此代码来自定义它们:

[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControl.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControlSelected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                             [UIColor whiteColor], UITextAttributeTextColor,
                                                             [UIColor grayColor], UITextAttributeTextShadowColor,
                                                             [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeTextShadowOffset,
                                                             [UIFont fontWithName:@"Georgia-Italic" size:0.0], UITextAttributeFont,
                                                             nil] forState:UIControlStateNormal];

为什么这会导致速度如此缓慢?我可以做些什么来提高性能?当它们出现在屏幕上时,它会抖动。我以前从来没有遇到过这样的问题。

我相当确定它的开关和分段控件,因为当我移除它们时,它会加速并且变得如丝般顺滑。我基本上是这样做的:

if (indexPath.row == 0)
        {
            cell.textLabel.text = @"text";
            UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"1", @"2", nil]];
            [segControl setSelectedSegmentIndex:[myBool boolValue]];
            [segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
            [segControl addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventValueChanged];
            cell.accessoryView = segControl;
        }

在我的cellForRowAtIndexPath7 次中,我怎样才能让它更快?

4

1 回答 1

0

我有一个正在开发的应用程序,并且有一些类似的自定义设置。我建议重用设置控件...您可以通过创建 UITableViewCell 子类并在其中设置您的 seg 控件来完成此操作,然后您可以为需要自定义的内容创建插座。

快速搜索找到了这个教程,它看起来就像我在说什么

UITableViewCell 原型教程

这样,您的细胞将完全可重复使用,因此速度更快。

但是,我现在不知道您的确切用例,所以也许这不适用于您。它通过自定义按钮、艺术和动画加速了我的单元格。

请记住 alloc 初始化非常慢。

我想另一种选择是使用控件预先初始化所有可以使用的控件,并将它们存储在数组中,然后仅将它们加载到 cellForRowAtIndexPath 中:

于 2012-07-26T00:47:18.033 回答