-5

I have two buttons inside sectioned tableview cell thumbs up and thumbs down. Initially image of both button is not selected. When I select thumbs up button its image become thumbs up selected and other one become thumbsdown not selected and vice versa.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    {
        enter code hereNSLog(@"mod:numberOfSectionsInTableView");
        NSLog(@"[preferences count]=%d",[preferences count]);
        return  [preferences count];
    }

    -(NSInteger)tableView:(UITableView *)tableView
    numberOfRowsInSection:(NSInteger)section
    {enter code here
        enter code herereturn [self.choices count];
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView
             cellForRowAtIndexPath:(NSIndexPath *)indexpath
    {


    NSLog(@"cellForRowAtIndexPath: DISPLAY TEST");  
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil) {

            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
                        NSLog(@"Text is: %@", [choices objectAtIndex:indexpath.row]);                   
            NSLog(@"CHOICE AT INDEX PATH IS: %@",[choices objectAtIndex:indexpath.row %[choices count]]);
            cell.textColor = [UIColor whiteColor];
            cell.backgroundColor = [UIColor blackColor];


            // Thumbs up button.
            //UIButton *thumbsUp = [[UIButton alloc]init];  
            thumbsUp = [UIButton buttonWithType:UIButtonTypeCustom];                        
            [thumbsUp setTag:(indexpath.row+(indexpath.section * 50))];
            [thumbsUp addTarget:self 
                         action:@selector(thumbUp_ButtonClicked:event:)
             forControlEvents:UIControlEventTouchUpInside];     
            [thumbsUp setTitle:@"" forState:UIControlStateNormal];
            thumbsUp.frame = CGRectMake(150.0, 20, 20, 15);
            [thumbsUp setBackgroundImage:[UIImage imageNamed:@"thumbsup_not_selected.png"]
         forState:UIControlStateNormal];

            //NSLog(@"------------------>TAG TEST : %d",(indexpath.row+(indexpath.section * 50)));
            [cell.contentView addSubview:thumbsUp];

            // Thumbs down button

            thumbsDown = [UIButton buttonWithType:UIButtonTypeCustom];
            [thumbsDown addTarget:self 
                           action:@selector(thumbDown_ButtonClicked:event:)
                forControlEvents:UIControlEventTouchUpInside];
            [thumbsDown setTitle:@"" forState:UIControlStateNormal];
            thumbsDown.frame = CGRectMake(200, 20, 20, 15);

            [thumbsDown setTag:indexpath.row+120];
            [cell.contentView addSubview:thumbsDown];
            [cell setSelectionStyle:UITableViewCellSelectionStyleNone];


        [thumbsDown setBackgroundImage:[UIImage imageNamed:@"thumbsdown_not_selected.png"]forState:UIControlStateNormal];

        }

        NSLog(@"------------> TAG TEST %d",thumbsUp.tag);
        cell.text = [choices objectAtIndex:(indexpath.row % [choices count])];


        NSLog(@"HELLO FOR TESTING");
        return cell;


        }
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
        NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
        if (sectionTitle == nil) {
            return nil;
        }

        // Create label with section title
        UILabel *label = [[[UILabel alloc] init] autorelease];
        label.frame = CGRectMake(15, 10, 300, 25);
        label.backgroundColor = [UIColor clearColor];
        label.textColor = [UIColor blackColor];
        label.shadowColor = [UIColor whiteColor];
        label.shadowOffset = CGSizeMake(0.0, 1.0);
        label.font = [UIFont boldSystemFontOfSize:16];
        label.textAlignment = UITextAlignmentLeft;
        label.text = sectionTitle;


        // Create header view and add label as a subview
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(12, 0, 300, 60)];
        [view autorelease];
        [view addSubview:label];
        //[view addSubview:segmentedControl];
        view.backgroundColor = [UIColor grayColor];
        return view;
    }

    //Thumbs Up Button Action

    - (IBAction)thumbUp_ButtonClicked:(id)sender event:(id)event
    {
        NSLog(@"Thumbs Up Check!");


        UIButton *button = (UIButton *)sender;
        UITableViewCell *cell = (UITableViewCell *) [[button superview] superview];


        NSIndexPath *indexPath = [myTable indexPathForCell:cell];
        NSLog(@"indexpath =%d",indexPath.row);
        //[button setTag:indexPath.row+(indexPath.section * 50)];

        int cTag=[sender tag];
        NSLog(@"------>TAG : %d", cTag);
        NSLog(@"------> Calculated TAG %d",indexPath.row+(indexPath.section * 50));
        if(cTag == (indexPath.row+(indexPath.section * 50)))
        {
            NSLog(@"BUTTON COUNT:");
            [button setBackgroundImage:[UIImage imageNamed:@"thumbsup_selected.png"]
                           forState:UIControlStateNormal];
        }


        NSInteger section = indexPath.section;
        NSInteger row = indexPath.row;

        //int row = button.tag;

        NSLog(@"SECTION IS:%d",section);
        NSLog(@"ROW IS: %d",row);


            NSArray *array = cell.contentView.subviews;
        NSLog(@"NUMBER OF OBJECTS: %d",[array count]);
        UIButton *test = (UIButton *)[array objectAtIndex:2];

        [test setBackgroundImage:[UIImage imageNamed:@"thumbsdown_not_selected.png"]forState:UIControlStateNormal];

    }

Due to issue with tag of button while I change image of one button several buttons are changing. If any one can please find a solution it will be helpful....

Susha
  • 37
  • 4

1 Answers1

1

This is a common occurrence due to the fact that the table view cells are recycled. Your scheme with the button tags is rather convoluted and error prone.

It would make more sense to keep track of the ThumbsUp/Down state of each cell in your table view's datatsource data model. Then, in cellForRowAtIndexPath: set each button state explicitly.

BTW: cell.text and cell.textColor are deprecated. You should use the properties of cell.textLabel.

Mundi
  • 79,884
  • 17
  • 117
  • 140
  • If any one can please provide code to rectify the issue it will be helpful. Problem is with setting tag for button... – Susha Oct 29 '11 at 10:40