2

All

I am developing one demo application using Tab bar controller containing 3 tabs in it. In first tab I am using one Table view controller .

I am having a problem in editing (adding/deleting) the table rows. I am not able to add or remove the rows from the table.

when I was using this table view without tabbar control,I was able to modify the table. Here I share my tableviewcontroller.h and .m files.

        **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
iCoder
  • 1,298
  • 1
  • 9
  • 25
  • try "self.tableView1.editing" instead of "self.editing " and set delegate and datasource proeprties of tableView1 – HarshIT Apr 06 '12 at 09:49

1 Answers1

0

Out of curiousity, why are you using a TableVIewController : UIViewController <UITableViewDelegate, UITableViewDataSource> instead of just making your TableViewController inherit from UITableViewController? Are you displaying any other content in this view? Because if you are not, you probably should subclass the view controller closest to what you intend to have - which is a UITableViewController.

If you do that, you'll also be able to access the default table for this view through the tableView (or self.tableView, but should not be necessary) property. It's not the cause of your problems, but it's good practice.

Argent
  • 795
  • 2
  • 7
  • 25