2012-04-06 9 views
2

AlleWie Tabellenzeilen in Tabbar basierte Anwendung

Ich entwickle eine Demo-Anwendung mit Tab-Leiste Controller mit 3 Registerkarten in sie zu bearbeiten. In der ersten Registerkarte verwende ich einen Table-View-Controller.

Ich habe ein Problem beim Bearbeiten (Hinzufügen/Löschen) der Tabellenzeilen. Ich kann die Zeilen nicht aus der Tabelle hinzufügen oder entfernen.

Wenn ich diese Tabellenansicht ohne Tabbar-Steuerelement verwendet habe, konnte ich die Tabelle ändern. Hier teile ich meine tableviewcontroller.h und .m-Dateien.

 **tableviewcontroller.h** 
     #import <UIKit/UIKit.h> 

     @interface TableViewViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>  
     { 
       IBOutlet UITableView *tableView1; 
       SMutableArray *arry; 
       NSString *enteredText; 
       UITextField *myTextField; 
       NSInteger rowIndex; 
      } 
     @property(nonatomic,readonly)NSString *enteredText; 
     - (IBAction) EditTable:(id)sender; 
      @end 

      **TableViewViewController.m** 
      #import "TableViewViewController.h" 
      @implementation TableViewViewController 
      @synthesize enteredText; 

     - (void)viewDidLoad 
     { 
      arry=[[NSMutableArray alloc]initWithObjects:@"iPhone",@"MacMini",@"iMac",@"MacBookProAir",@"MacBookPro",nil]; 
      self.title = @"Table View "; 
      UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)]; 
      [self.navigationItem setLeftBarButtonItem:addButton]; 
      [super viewDidLoad]; 
     } 
     - (void)didReceiveMemoryWarning 
     { 
      [super didReceiveMemoryWarning]; 
     } 
- (void)dealloc 
{ 
    [super dealloc]; 
} 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
int count = [arry count]; 
if(self.editing) count++; 
return count; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
    cell = [[[UITableViewCell alloc]initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]autorelease]; 
    } 
    int count = 0; 
    if(self.editing && indexPath.row != 0) 
    count = 1; 
    if(indexPath.row == ([arry count]) && self.editing) 
    { 
    cell.textLabel.text = @"ADD"; 
     return cell; 
    } 
    cell.textLabel.text = [arry objectAtIndex:indexPath.row]; 
    return cell; 
} 
- (IBAction)AddButtonAction:(id)sender 
{ 
    [arry addObject:@"asd"]; 
    [tableView1 reloadData]; 
} 
- (IBAction)DeleteButtonAction:(id)sender 
{ 
    [arry removeLastObject]; 
    [tableView1 reloadData]; 
} 
- (IBAction) EditTable:(id)sender 
{ 
    if(self.editing) 
    { 
     [super setEditing:NO animated:NO]; 
     [tableView1 setEditing:NO animated:NO]; 
     [tableView1 reloadData]; 
     [self.navigationItem.leftBarButtonItem setTitle:@"Edit"]; 
     [self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStylePlain]; 
    } 
    else 
    { 
     [super setEditing:YES animated:YES]; 
     [tableView1 setEditing:YES animated:YES]; 
     [tableView1 reloadData]; 
     [self.navigationItem.leftBarButtonItem setTitle:@"Done"]; 
     [self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStyleDone]; 
    } 
} 
-(UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (self.editing == NO || !indexPath) 
     return UITableViewCellEditingStyleNone; 
    if (self.editing && indexPath.row == ([arry count])) 
    { 
     return UITableViewCellEditingStyleInsert; 
    } 
    else 
    { 
    return UITableViewCellEditingStyleDelete; 
    } 
     return UITableViewCellEditingStyleNone; 
} 
-(void)tableView:(UITableView *)aTableView commitEditingStyle:UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     //[arry removeObjectAtIndex:indexPath.row]; 
     rowIndex=indexPath.row; 
     UIActionSheet *actionSheet=[[UIActionSheet alloc] 
     initWithTitle:@"Are you sure you want to delete this ?" 
     delegate:self 
     cancelButtonTitle:@"Cancel" 
     destructiveButtonTitle:@"Delete" 
     otherButtonTitles:nil,nil]; 
     [actionSheet showInView:self.view]; 
     [actionSheet release]; 
    } 
    else if(editingStyle == UITableViewCellEditingStyleInsert) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle:@"Enter Row value" 
         message:@"blank" 
         delegate:self 
         cancelButtonTitle:@"Dismiss" 
         otherButtonTitles:@"OK!", nil]; 
     myTextField= [[UITextField alloc] initWithFrame:CGRectMake(12, 45, 260, 25)]; 
     [myTextField setBackgroundColor:[UIColor whiteColor]]; 
     [alert addSubview:myTextField]; 
     [alert show]; 
     [alert release]; 
    } 
} 

-(void) actionSheet:(UIActionSheet *) actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex; 
{ 
    if(buttonIndex==0) 
    { 
     [arry removeObjectAtIndex:rowIndex ]; 
     [tableView1 reloadData]; 
    } 
    else if (buttonIndex==1) 
    { 
     [tableView1 reloadData]; 
    } 
} 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 
     [tableView1 reloadData]; 
    } 
    else if (buttonIndex == 1 && myTextField.hasText!=NO) 
    { 
     NSString *txt=[myTextField text]; 
    [arry addObject:txt ]; 
    [tableView1 reloadData]; 
    } 
} 
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 
@end 
+0

versuchen Sie "self.tableView1.editing" anstelle von "self.editing" und setzen Sie die Delegate- und Datenquelleprojekte von tableView1 – HarshIT

Antwort

0

Aus Neugier, warum verwenden Sie einen TableVIewController : UIViewController <UITableViewDelegate, UITableViewDataSource> statt nur von UITableViewController Ihre TableViewController vererben zu machen? Zeigen Sie in dieser Ansicht andere Inhalte an? Wenn dies nicht der Fall ist, sollten Sie wahrscheinlich den View-Controller, der Ihrem beabsichtigten Ziel am nächsten kommt, ableiten - was eine UITableViewController ist.

Wenn Sie dies tun, können Sie auch auf die Standardtabelle für diese Ansicht über die Eigenschaft tableView (oder self.tableView, aber sollte nicht erforderlich) zugreifen. Es ist nicht die Ursache für deine Probleme, aber es ist eine gute Übung.

Verwandte Themen