iProRage
iProRage

Reputation: 424

Adding cell.textLabel.text value to an array and displaying it

i have a UItableView and i have two buttons on each cell. You can add or subtract 1 from the cell's textLabel. I add the cells current value +1 with this:

  - (IBAction)addLabelText:(id)sender{
     num = [NSString stringWithFormat:@"%d",[cell.textLabel.text intValue] +1];//<--- num is an NSNumber
     number = [[NSMutableArray alloc]initWithObjects:num, nil];//<---- number is an NSMutableArray
     [myTableView reloadData];

}

and I am trying to subtract the text and store it in an array with this:

    - (IBAction)subtractLabelText:(id)sender
{
        if ( [[cell.textLabel text] intValue] == 0){     


     num = [NSString stringWithFormat:@"%d",[num intValue] +0];
     [number addObject:num];
         [myTableView reloadData];

     }
     else{
     num = [NSString stringWithFormat:@"%d",[num intValue] -1];
     [number addObject:num];
     [myTableView reloadData];
     }
}

and im trying to set the cell.textLabel.text in the cellForRow like this:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    static NSString *identifier = @"Cell";

    cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil)
     {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];


     } 
    cell.textLabel.text = [number objectAtIndex:indexPath.row];//<---IM USING THIS LINE TO SET THE NEW TEXTLABEL
    cell.textLabel.text = @"1";


return cell;
}

MY PROBLEM

So, the addition works, but the subtraction does not. It doesnt work at all when i press the button on the cell. Thanks in advance!!

Upvotes: 0

Views: 5450

Answers (1)

DougW
DougW

Reputation: 30025

At the risk of pointing out the obvious... you seem to have hard-coded the text property to @"1".

cell.textLabel.text = [number objectAtIndex:indexPath.row];//<---IM USING THIS LINE TO SET THE NEW TEXTLABEL
cell.textLabel.text = @"1";

The first line is probably doing what you think... but then you're immediately changing it back to @"1".

EDIT - Based on clarification in comments, here's what I think you want to do. I will modify your own code as posted.

Note that I put my addition into viewDidLoad as an example. You could do this in init, or any number of other places, at whatever point you know how many cells you want to show.

- (void)viewDidLoad {
    self.number = [[[NSMutableArray alloc] init] autorelease];
    for (int i = 0; i < [HOW MANY CELLS DO YOU WANT?]; i++) {
        [self.number addObject:@"1"];
    }

    [myTableView reloadData];
}

- (IBAction)addLabelText:(id)sender {
// Note that I'm assuming here that your button is a direct child of the cell.
// If not, you'll need to change this.
    UITableViewCell *cell = [sender superview];
    NSInteger newNumber = [cell.textLabel.text intValue] + 1;
    NSString *newNumberString = [NSString stringWithFormat:@"%d", newNumber];

    [self.number replaceObjectAtIndex:cell.tag withObject:newNumberString];

    [myTableView reloadData];
}

- (IBAction)subtractLabelText:(id)sender {
// Note that I'm assuming here that your button is a direct child of the cell.
// If not, you'll need to change this.
    UITableViewCell *cell = [sender superview];
    NSInteger newNumber = [cell.textLabel.text intValue] - 1;
    newNumber = (newNumber < 0) ? 0 : newNumber;

    NSString *newNumberString = [NSString stringWithFormat:@"%d", newNumber];

    [self.number replaceObjectAtIndex:cell.tag withObject:newNumberString];

    [myTableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifier = @"Cell";

    cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
    }

    cell.tag = indexPath.row; // Important for identifying the cell easily later
    cell.textLabel.text = [self.number objectAtIndex:indexPath.row];

    return cell;
}

I don't want to get too much more in depth, but I would recommend you take a look at reloading only the cell modified, instead of calling [myTableView reloadData] every time.

Upvotes: 1

Related Questions