0

我是 iOS 编程的新手(但我已经完成了我的作业......浏览了有关 iOS 和谷歌教程的书籍)。我正在尝试这样做:

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

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

问题 :

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

表情符号和文本在 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);
}

谢谢,普里亚

4

2 回答 2

2

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

于 2012-04-22T17:31:45.400 回答
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"]

和情感 # 出来像:

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

你可以设置情绪 # 像:

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

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

于 2012-04-23T01:28:19.940 回答