UITableViewCell图像在一个单元格中自动/烦人地更新到其他单元格

时间:2012-04-22 17:25:11

标签: iphone cocoa-touch

是iOS编程的新手(但我已经完成了我的作业......浏览iOS和Google教程的书籍)。我试图这样做:

  1. 用户在文本字段中输入一些文字,&选择一个表情符号。

  2. 然后我将用户输入文本添加到UITableViewCell并将单元格添加到UITableView。

  3. 问题:

      

    说,用户输入一些文字并选择“快乐”表情符号。

         

    在UITableView中更新表情符号和文本。没问题。

         

    接下来,用户输入一些其他文本,并选择“悲伤”表情符号。

         

    问题是:   前一个单元格中的表情符号(它是一个快乐的表情符号)也变为“悲伤”;但我不希望以前的细胞发生变化。

    @synthesize table;
    @synthesize buttonEmotionHappy;
    @synthesize buttonEmotionLaugh;
    
    int myEmoticonNum;
    
    /**
     * Called when the button's pressed
     * sender : the button which's pressed, consequently invoking this
     */
    -(IBAction)buttonPressed:(id)sender {
    
        NSLog(@"Button Pressed");
        [self addToInputArray:[textFieldUserInput text]];
    
        [table reloadData];
        textFieldUserInput.text = @"";
    }
    
    
    -(IBAction)emotionExpressed:(id)sender {
    
        if (sender == buttonEmotionHappy) {
    
            NSLog(@"Happy emoticon chosen");
            myEmoticonNum = 1;
    
        } else if (sender == buttonEmotionSad) {
    
            NSLog(@"Sad emoticon chosen");
            myEmoticonNum = 2;
        }
    }
    
    ...
    ...
    ...
    ...
    #pragma mark -
    #pragma mark Table View Data Source Methods
    
    -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [self.arrayInput count];
    }
    
    
    -(UITableViewCell *) tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
    
        if (cell == nil) {
    
           cell = [[UITableViewCell alloc] 
                initWithStyle:UITableViewCellStyleDefault 
                reuseIdentifier:SimpleTableIdentifier];
        }
    
    
        if (myEmotionNum == 1) {
            cell.imageView.image = [UIImage imageNamed:@"SmileyHappy.png"];
    
        } else if (myEmotionNum == 2) {
            cell.imageView.image = [UIImage imageNamed:@"SmileySad.png"];
        }  
    
    
        NSUInteger row = [indexPath row];
        cell.textLabel.text = [arrayInput objectAtIndex:row];
    
        return cell;
    }
    
    -(void) addToInputArray: (NSString *)userInput {
    
        [arrayInput insertObject:userInput atIndex:0];
        NSLog(@"Added %@ to User-Input-Array", userInput);
    }
    

    谢谢, 普里亚

2 个答案:

答案 0 :(得分:2)

您必须为每个单元格存储imageEmotion,而不是每个表视图 尝试将其作为属性添加到自定义单元格类中。

答案 1 :(得分:1)

您正在存储单个值myEmotionNum,这意味着每个单元格都会获得相同的表情符号。你需要每行/单元存储一个情感。

您可以为情感ID设置并行数组(如self.arrayEmotions),也可以使用单个数组并存储字典。在JSON格式中,我建议像:

[ { "text": "Hello", "emotion": 1 },
  { "text": "Next row", "emotion": 2} ]

所以你的addToInputArray:会是这样的:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
  userInput, @"text", [NSNumber numberWithInt:0], @"emotion"];
[arrayInput insertObject:dict atIndex:0];

tableView:cellForRowAtIndexPath:方法中,您可以获得如下文字:

[[arrayInput objectAtIndex:[indexPath row]] objectForKey:@"text"]

情感#out like:

[[[arrayInput objectAtIndex:[indexPath row]] objectForKey:@"emotion"] intValue]

你可以设置情感#:

[[arrayInput objectAtIndex:[indexPath row]] setObject:[NSNumber numberWithInt:someEmoticonNumber] forKey:@"emotion"]

(请注意,字典必须存储对象,这就是您需要转换为/ NSNumber的原因)