2010-12-29 15 views
7

Sto cercando di attivare la modalità di modifica per un UITableView. Quando faccio clic sul pulsante "Modifica", si passa a "Fatto", ma i segni meno rosso rotondo non vengono visualizzati nella tabella. Sto postando alcuni dei metodi della classe. Il delegato dell'app ha creato una barra delle schede e le viste all'interno delle schede dispongono di controller di navigazione. tutto è fatto in codice, poco è fatto con i file pennino. Cosa c'è che non va?UITableView modalità di modifica non funziona

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [ikub.subscriptions count]; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    int i = [indexPath row]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"]; 
    } 
    Subscriptions *s = [ikub.subscriptions objectAtIndex:i]; 
    cell.textLabel.text   = [s title]; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ artikuj te rinj, %@ artikujt te lexuar", [s new], [s read]]; 
    if (deleteActive) { 
     cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
    } else { 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } 
    return cell; 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    Subscriptions *s = [ikub.subscriptions objectAtIndex:[indexPath row]]; 
     NSString *address = [[NSString alloc] init]; 
     NSString *type = [NSString stringWithString:[s type]]; 
     if ([type isEqualToString:@"Category"]) { 
      address = [NSString stringWithFormat:@"http://www.ikub.al/Rss.aspx?node=9e26cdb8-dba6-4504-8bb6-29f0753be179~%@", [s code]]; 
     } else if ([type isEqualToString:@"Tag"]) { 
      address = [NSString stringWithFormat:@"http://www.ikub.al/Rss.aspx?tag=%@", [s code]]; 
     } 
     address = [address stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
     SubscriptionStories *ss = [[SubscriptionStories alloc] init]; 
     ss.address = address; 
     ss.title = [s title]; 
     [self.navigationController pushViewController:ss animated:YES]; 
     [ss release]; 
} 
- (void)viewWillAppear:(BOOL)animated { 
    [subscriptionsTable reloadData]; 
} 
- (void)viewDidLoad { 
    refreshButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:nil]; 
    self.navigationItem.leftBarButtonItem = refreshButton; 
    [refreshButton release]; 
    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
    [super viewDidLoad];  
} 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {  
    return YES; 
} 
+0

hey olsi si prega di modificare la tua domanda, formattando correttamente. Molto difficile capire il codice. Non c'è spazio tra la fine e l'inizio dei metodi. – iPhoneDev

risposta

3

Non eredita correttamente.

Non si otterrà nulla da UIViewController, contiene solo le visualizzazioni. Ti suggerisco di provare UITableViewController.

+1

Nulla a che vedere con l'ereditarietà se ha un oggetto tableView e UIViewController è il suo delegato. –

1

Riparato! Dovuto ereditare da UITableViewController non da UIViewController.

2

Dove si scrive l'altro metodo di uitable metodo di visualizzazione di modifica Ti piace questa

-(void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 

    return UITableViewCellEditingStyleDelete; 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // If row is deleted, remove it from the list. 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     rowNumber = indexPath.row; 
     UIActionSheet *registerActionSheet = [[UIActionSheet alloc] initWithTitle:@"Sure You Want To Delete?"delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Yes", nil]; 
     registerActionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
     [registerActionSheet showInView:self.view]; 
     [registerActionSheet release]; 
     // delete your data item here 
     // Animate the deletion from the table. 
     //[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 
17

L'eredità non hanno alcun impatto su di esso.

È possibile utilizzare questo metodo funziona quando si assegna il pulsante destro del controller di navigazione a esso.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [tableView setEditing:editing animated:YES]; 
} 

Oppure si può scrivere un metodo che alterna fondamentalmente lo stato del UITableView come

[tableView setEditing:TRUE]; 

e quando il pulsante è diventato fatto quindi impostare a

[tableView setEditing:FALSE]; 
+1

Sono d'accordo, votando per sopra, io uso il solito UIViewController e funziona bene - invece è necessario: 1. rendere il controller un delegato di UITableViewDelegate, UITableViewDataSource, 2. implementare - (void) setEditing: (BOOL) modificare l'animazione :(BOOL) animato, 3. aggiungi programmaticamente il pulsante EDIT - self.navigationItem.rightBarButtonItem = self.editButtonItem – Anonymous

+0

UITableViewController è troppo limitato a volte è per questo che usiamo UIViewController. Buon post! Grazie. –

Problemi correlati