0

iOSプログラミングの初心者です(ただし、宿題は済ませています... iOSとGoogleのチュートリアルに関する本を読んでいます)。これを行おうとしています:

  1. ユーザーはテキストフィールドにテキストを入力し、絵文字を選択します。

  2. 次に、user-input-textを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を保存しているため、すべてのセルに同じ絵文字が表示されます。行/セルごとに1つの感情を保存する必要があります。

感情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 に答える