Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UITableView edit mode not working

I'm trying to activate the edit mode for a UITableView. When I click the "Edit" button, it changes to "Done" but the round red minus signs dont show up in the table. I'm posting below some of the methods of the class. The app delegate created a Tab Bar and the views inside the tabs have navigation controllers. all is done in code, little is done with nib files. What's wrong?

- (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;  
}
like image 505
Olsi Avatar asked Dec 29 '10 04:12

Olsi


3 Answers

The inheritance don't have any impact on it.

You can use this method it works when you assign the rightbutton of the navigationController to it.

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

Or you can write a method which basically toggles the state of the UITableView like

[tableView setEditing:TRUE];

and when the button has become done then toggle it to

[tableView setEditing:FALSE];
like image 55
Sneha Avatar answered Oct 05 '22 22:10

Sneha


You aren't inheriting correctly.

You're not going to get anything out of the UIViewController, it only contains the views. I suggest you try UITableViewController.

like image 27
bear Avatar answered Oct 06 '22 00:10

bear


Where you write the other method of uitable view editing method Like this

-(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];
    }
}
like image 28
GhostRider Avatar answered Oct 05 '22 22:10

GhostRider