2012-04-02 7 views
3

Ich habe eine Schaltfläche, die, wenn gedrückt wird, ein Tableview Abschnitt hinzugefügt wird und fügt auch eine neue Zeile zu diesem Abschnitt. Wie kann ich das programmatisch umsetzen?Wie Abschnitt und Tabelle Zelle dynamisch hinzugefügt werden

Ich habe eine Reihe von Zellen.

Hier sind meine Codes

- (IBAction)addCell:(id)sender { 

    UITableViewCell *newCell = [[UITableViewCell alloc] init]; 

    counter++; 
    [cells addObject:newCell]; 

    [self.tableView reloadData]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return [cells count]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 1; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     //this is where i want to adjust the row per section 
     //this code hide the recent sections, only the current created section appears 
     return [cells objectAtIndex:indexPath.row]; 
} 
+0

Was Sie getan haben, ist kein guter Weg, um mit 'UITableView' umzugehen! Sie haben 'UITableViewCell' an anderer Stelle erstellt, während es in' cellForRowAtIndexPath' empfohlen wird. Sie können tun, was Sie wollen, indem Sie einfach Ihre 'dataSource' ändern und dann die Tabelle neu laden. – tipycalFlow

Antwort

1

Hallo versuchen, diese zu lesen:

How to display the UITableView programmatically?

Adding cells programmatically to UITableView


Hope this Sie helfen könnte.

+0

Vielen Dank, aber ich habe kein Problem beim Hinzufügen von Zellen dynamisch in eine Tabellenansicht. Meine Sorge ist, wie man einen Abschnitt und eine Zelle zu diesem neu hinzugefügten Abschnitt hinzufügt. Wie wir wissen, müssen wir die Methode "- - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView konfigurieren, um die Anzahl der Abschnitte zurückzugeben. Ich habe einen Zähler, um dies zu tun, wenn die Taste gedrückt wird, dann laden Sie den Tisch nach. Das Problem ist, wie kann ich die - (UITableViewCell *) TableView: (UITableView *) TableView CellForRowAtIndexPath: (NSIndexPath *) IndexPath-Methode, die die if-Anweisung für jeden Abschnitt zu erscheinen? – ruelluna

+1

Bitte schlagen Sie Links in Kommentaren nicht als Antwort vor. –

0

Aktualisieren Sie zuerst Ihr Datamodell (NSArray oder veränderbar). Zweitens, wenn Sie die Tabellenansicht aktualisieren möchten, fügen Sie einen Code hinzu [self.tableView reloadData];


oops, Ihr Code einige seltsame uitaleviewDataSource, Delegate Method.

auch, haben Sie einen Fehler.

Warum implementiert Sie NumberOfRowsInSection return 1? sehr eigenartig.

Ich habe unter dem Code geschätzt.

CASE 1. Nein hat DataModel.

- (IBAction)addCell:(id)sender 
{ 

    cellRowsCount++; 

    [self.tableView reloadData]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return cellRowsCount; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     static NSString *CellIdentifier = @"Cell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
     { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
     reuseIdentifier:CellIdentifier]; 
     } 

    return cell; 
    } 

Ihre Codes, Datenmodell (NSArray oder wandelbar) muss nicht unbedingt, so dass ich einfach rowCount Variable hinzugefügt und Ihre rowsCount von tableviewCell synchronisiert hat.

Wenn Sie mit DataModel wollen, unter CASE2. Verweis auf PLZ.


CASE2. hat DataModel.

- (IBAction)addCell:(id)sender 
{ 

    textCount ++; 

    NSString *cellText = [NSString stringWithFormat:"blah %d", textCount]; 
    [myArray addObject:cellText]; 

    [self.tableView reloadData]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return [myArray count]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [[myArray objectAtIndex:section] count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:CellIdentifier]; 
    } 

    cell.textLabel.text = (NSString *)[myArray objectAtIndex:indexPath.row]; 

    return cell; 
} 
+0

Das Problem ist, wie kann ich mit der - (UITableViewCell *) TableView: (UITableView *) TableView CellForRowAtIndexPath: (NSIndexPath *) IndexPath-Methode, die die if-Anweisung für jeden Abschnitt zu erscheinen? – ruelluna

+0

Multisection ist Mean gleich 2d Array-Modell, wenn Sie Abschnitt erweitern möchten, muss Ihr Datamodell 2d Array implementiert werden. Auch über TableView numberOfSectionInTableview-Methode fügen Sie einen Code zurück [myArray count]; implementiert auch. –

+0

numberOfSection implementiert return [myArr count]; numberOfRowsInSection muss implementiert return [[myArr objectAtIndex: section] count]; –

0

Sie haben nur den neuen Abschnitt und das neue Element in das Array hinzuzufügen, die den Abschnitt und die Elemente wie so gilt:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    animals = @{@"Section 1" : @[@"Item 1", @"Item 2", @"Item 3"], 
       @"Section 2" : @[@"Item 1", @"Item 2"]}; 
} 

nach, dass Sie nur die Tableview neu zu laden, wo Sie Ihre Logik Bedürfnisse :

[self.tableView reloadData]; 
Verwandte Themen