0

我现在正在使用这段代码:

- (void)loadLauncher:(NSMutableArray *)categoriesArray {
    _launcherView = [[TTLauncherView alloc] initWithFrame:self.view.bounds];
    _launcherView.columnCount = 3;

    // Number of pages in your launcherView.
    NSMutableArray *pages = [[NSMutableArray alloc] initWithCapacity:2];

    int numberOfObjects = [categoriesArray count];

    // The launcherItems in each page, calculate automatically the number of objects available for the launcher.
    NSMutableArray *launcherItems = [[NSMutableArray alloc] initWithCapacity:1];

    // The counter to identify if the number of objects exceeds the,
    // capacity of a launcher page of 9.
    int j = 1;

    for (int i = 0; i < numberOfObjects; i++){  
        if (j > 9){
            // Add the current launcherItems array to the pages.
            [pages addObject:launcherItems];

            // Initialise new launcher items.
            launcherItems = [[NSMutableArray alloc] initWithCapacity:1];

            // Start the counter again.
            j = 1;
        } else {  
            int i = 0;
            for (Category *c in categoriesArray) {
                NSString *categoryImage = [[NSString stringWithFormat:@"bundle://category_%@_icon.png", [Utility removeSpecialCharacters:@"&'- " withString:c.categoryName]] lowercaseString];
                NSLog(@" - %@", categoryImage);
                TTLauncherItem *launcherItem = [[[TTLauncherItem alloc] initWithTitle:c.categoryName
                                                                                image:categoryImage
                                                                                  URL:[NSString stringWithFormat:@"%d", i]
                                                                            canDelete:NO] autorelease];

                [launcherItems addObject:launcherItem];         

                i++;
            }
        }

        j++;
    }

    // Add the current launcherItems to the pages.
    [pages addObject:launcherItems];
    [launcherItems release];

    _launcherView.pages = pages;

    [self.view addSubview:_launcherView];
}

老方法:

我正在使用TTLauncherView来自http://three20.info的控制器。

Three20 是一个 Objective-C 类的集合,为 App Store 上越来越多的流行应用程序提供支持。它提供了许多非常有用的功能,可以节省您的开发时间。

该库被构建为模块化的,这意味着您可以有选择地将库的元素合并到您的项目中。还有一组不断增长的扩展,包括插入式 XML 和 JSON 解析,以及对应用程序主题化的 CSS 样式表支持。

我不太确定如何执行以下操作:

  1. 检查 my 中是否arrayOfLauncherItems有 16 个对象;和
  2. 如果对象超过 16 个,则将剩余的对象添加到_launcherView.pages. 因此,如果假设总共有 32 个对象,我希望能够创建剩余 16 个对象的另一个数组并将它们添加到_launcherView.pages NSArray.

这是TTLauncherView控制器如何工作的示例:

TTLauncherView *_launcherView = [[TTLauncherView alloc] initWithFrame:self.view.bounds];

NSMutableArray *arrayOfLauncherItems = [[NSMutableArray alloc] init];
//add TTLauncherItem objects to arrayOfLauncherItems.

_launcherView.pages = [NSArray arrayWithObjects:arrayOfLauncherItems, nil];

arrayOfLauncherItems可能包含超过 16 个对象,这意味着剩余的对象TTLauncherItem应该在第二页等等(取决于总共有多少对象)。

执行以下操作显然会从 中添加相同的 16 个对象arrayOfLauncherItems,这意味着现在有第二页,如果arrayOfLauncherItems.

_launcherView.pages = [NSArray arrayWithObjects:arrayOfLauncherItems, arrayOfLauncherItems, nil];
4

2 回答 2

1

1)您用于[myArray count]获取数组中的项目数。

2)使用for循环:

NSMutableArray *overflow = [NSMutableArray array];
NSMutableArray *sixteen = [NSMutableArray array];
for (int i = 16; i < [arrayOfLauncherItems count]; i++)
{
    [overflow addObject:[arrayOfLauncherItems objectAtIndex:i]];
}
for (int i = 0; i < 16; i++)
{
    [sixteen addObject:[arrayOfLauncherItems objectAtIndex:i]];
}

_launcherView.pages = [NSArray arrayWithObjects:sixteen, overflow, nil];

第一个 for 循环将从索引 16 到数组末尾的对象添加到另一个数组中。第二个以原始数组的前 16 个元素组成的数组结束。

于 2010-11-26T13:47:36.170 回答
1

我有您可能想要使用的以下代码。基本思想是根据可用对象的数量自动计算页数。我假设您在每个页面中有 3x3=9 个启动器项目。这样,您就不必担心小于或大于 9 的对象总数。您可以根据需要将此值放在一个常量中。

NSMutableArray *pages = [NSMutableArray array];
NSMutableArray *launcherItems = [NSMutableArray array];

//the counter to identify if the number of objects exceeds the
//capacity of a launcher page of 9
int j = 1;
for (int i = 0; i < numberOfObjects; i++){  

    TTLauncherItem *launcherItem = [[[TTLauncherItem alloc] initWithTitle: @"a title" 
                                                                    image: @"bundle://abc.png"
                                                                      URL: @"someUrlPath"
                                                                canDelete:TRUE] autorelease];
    [launcherItems addObject:launcherItem];         

    j++;

    if (j> 9){
        //add the current launcherItems to the pages
        [pages addObject:launcherItems];

        //initialize new launcher items
        launcherItems = [NSMutableArray array];
        //start again the counter
        j = 1;
    }       
}
//add the current launcherItems to the pages
[pages addObject:launcherItems];

_launcherView.pages = pages;
于 2010-12-06T14:05:07.277 回答