代码之家  ›  专栏  ›  技术社区  ›  gotnull mzelina

使用Three20的ttlauncher视图:需要帮助在Objective-C中将nsmutable数组中的剩余对象拆分和添加到NSArray

  •  0
  • gotnull mzelina  · 技术社区  · 14 年前

    我现在使用以下代码:

    - (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类的集合,为应用商店中越来越多的流行应用程序提供支持。它提供了许多非常有用的特性,可以节省开发时间。

    库是模块化的,这意味着您可以有选择地将库的元素合并到您的项目中。还有越来越多的扩展,包括XML和JSON解析,以及CSS样式表对应用程序主题化的支持。

    我不太清楚该怎么做:

    1. 检查我的 arrayOfLauncherItems 有16个物体;和
    2. 如果有超过16个对象,则将其余对象添加到 _launcherView.pages . 所以,如果假设总共有32个对象,我希望能够创建剩余16个对象的另一个数组,并将它们添加到 _启动程序视图.pages NSArray .

    这是一个关于 TTLauncher视图 控制器工作:

    TTLauncherView *_launcherView = [[TTLauncherView alloc] initWithFrame:self.view.bounds];
    
    NSMutableArray *arrayOfLauncherItems = [[NSMutableArray alloc] init];
    //add TTLauncherItem objects to arrayOfLauncherItems.
    
    _launcherView.pages = [NSArray arrayWithObjects:arrayOfLauncherItems, nil];
    

    这个 阵列发射 可能包含超过16个对象,这意味着 TTLauncherItem 对象应该位于第二页,以此类推(取决于总共有多少个对象)。

    执行以下操作显然会添加相同的16个对象 阵列发射 ,这意味着现在有了第二页,这基本上是我想要实现的,如果 阵列发射 .

    _launcherView.pages = [NSArray arrayWithObjects:arrayOfLauncherItems, arrayOfLauncherItems, nil];
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   Hoang Pham    13 年前

    我有下面的代码,您可以使用。基本思想是根据可用对象的数量自动计算页数。我假设每页有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;
    
        2
  •  1
  •   Evan Mulawski    14 年前

    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];