0

ich diesen Code jetzt bin mit:Three20 des TTLauncherView Verwendung: Need mit Spaltung helfen und das Hinzufügen von verbleibenden Objekten aus einem NSMutableArray zu einem NSArray in Objective-C

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

Alter Methode:

ich bin mit TTLauncherView Controller von http://three20.info.

Three20 ist eine Sammlung von Objective-C-Klassen, die eine wachsende Anzahl beliebter Anwendungen im App Store antreibt. Es bietet Dutzende von unglaublich nützlichen Funktionen, die Entwicklungszeit sparen.

Die Bibliothek ist modular aufgebaut, dh Sie können Elemente der Bibliothek selektiv in Ihr Projekt integrieren. Es gibt auch eine wachsende Anzahl von Erweiterungen, einschließlich Drop-in-XML- und JSON-Parsing sowie CSS-Stylesheet-Unterstützung für die Thematisierung Ihrer Anwendungen.

Ich bin nicht ganz sicher, wie folgendes zu tun:

  1. prüfen, ob meine arrayOfLauncherItems 16 Objekte in sich hat; und
  2. Wenn mehr als 16 Objekte vorhanden sind, fügen Sie den Rest der verbleibenden Objekte zu _launcherView.pages hinzu. Wenn also insgesamt 32 Objekte vorhanden sind, möchte ich ein weiteres Array der verbleibenden 16 Objekte erstellen und sie der _launcherView.pagesNSArray hinzufügen können.

Dies ist ein Beispiel dafür, wie die TTLauncherView Regler arbeitet:

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

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

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

Die arrayOfLauncherItems kann mehr als 16 Objekte enthalten, was bedeutet, daß die verbleibenden TTLauncherItem Objekte auf der zweiten Seite und so weiter sein sollte (abhängig davon, wie viele Gesamtobjekte es gibt).

Das Folgende fügt offensichtlich die gleichen 16 Objekte von arrayOfLauncherItems hinzu, was bedeutet, dass es jetzt eine zweite Seite gibt, was ich im Wesentlichen erreichen möchte, wenn es mehr als 32 Objekte in arrayOfLauncherItems gibt.

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

Antwort

1

Ich habe den folgenden Code, den Sie verwenden möchten. Grundidee ist, die Anzahl der Seiten basierend auf der Anzahl der verfügbaren Objekte automatisch zu berechnen. Ich nehme an, dass Sie 3x3 = 9 Launcher-Elemente auf jeder Seite haben. Auf diese Weise müssen Sie sich keine Gedanken über die Gesamtzahl der Objekte machen, die kleiner oder größer als 9 sind. Sie können diesen Wert in eine Konstante setzen, wenn Sie möchten.

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; 
+0

Ich habe meine ursprüngliche Frage aktualisiert und Ihren Code verwendet. Aber ich bekomme nicht die gleichen Gegenstände auf beiden Seiten. Setzen Sie initWithCapacity außerdem auf 2 für die Anzahl der Seiten. Wie kann ich das kontrollieren, wenn mehr Seiten als zwei für die Gesamtzahl der Elemente vorhanden sind? – fuzz

+0

Können Sie mir mit diesem Fehler helfen? Ich verwende Ihren Code, aber ich benutze jetzt eine columnCount von 3, was mir insgesamt 9 Kategorien pro Seite gibt. Das Problem ist, dass der 10. Artikel nicht angezeigt wird. Es überspringt einfach den 10. Gegenstand und geht auf Seite 2, aber es beginnt mit dem 11. Kategorie-Gegenstand. Würde es dir etwas ausmachen, mir dabei zu helfen? – fuzz

+0

Hallo Fulvio, Entschuldigung für die Verspätung, mir war Dein Kommentar nicht bekannt. Bitte beachten Sie den aktualisierten Code, wenn es funktioniert. –

1

1) Sie verwenden [myArray count] die Anzahl der Elemente in einem Array zu erhalten.

2) Verwenden einer for-Schleife:

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

Die erste Schleife würde für die Objekte aus dem Index 16 bis zum Ende des Arrays und fügen sie in ein anderes Array hinzuzufügen. Die zweite endet mit einem Array der ersten 16 Elemente des ursprünglichen Arrays.

+0

Der obige Code funktioniert nicht so, wie ich es brauche. Es ist eigentlich viel mehr Gegenstände als es sein sollte. Es zeigt tatsächlich mehr als 16 pro Seite an, aber es zeigt tatsächlich auch einige auf der zweiten Seite.Vielleicht implementiere ich es nicht richtig. Ich überprüfe, ob ArrayOfLauncherItems größer als 16 ist und benutze deinen Code ELSE, nur _launcherView.pages = [NSArray arrayWithObjects: arrayOfLauncherItems, nil]; – fuzz

+0

Ich denke, ich verstehe, was Sie versuchen zu tun. Sehen Sie sich mein bearbeitetes Codebeispiel an. –

+0

Ich glaube, Sie haben vergessen, ein paar Arrays in dort zu ersetzen. Ich bin mir nicht sicher, was myArray und arrayOfLauncherItems jetzt ist. Sollen sie gleich sein? Du machst auch nichts mit Überlauf. – fuzz

Verwandte Themen