是iOS编程的新手(但我已经完成了我的作业......浏览iOS和Google教程的书籍)。我试图这样做:
用户在文本字段中输入一些文字,&选择一个表情符号。
然后我将用户输入文本添加到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);
}
谢谢, 普里亚
答案 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
的原因)