0

各行にクリックカウンターと行番号を表示する必要があるtableViewを開発しています。アプリケーションの初期化時に、各セルの初期クリックカウンター値は0でなければなりません。次に、ユーザーがセルをクリックするたびに、セル内のクリック カウンターの値を増やします。

私は26の固定行を取ります。添付画像のように tableData.plist ファイルを取得しました。ここに画像の説明を入力

plist で self.dataArray を初期化しています。

ここで、didSelectRowAtIndexPath デリゲート メソッドで実装を行いたいと考えています。行がタップされた場合、その行のクリック カウンターがインクリメントされます。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *path = [[NSBundle mainBundle] pathForResource:@"tableData" ofType:@"plist"];
    self.dataArray = [NSMutableArray arrayWithContentsOfFile:path];//array initialized with plist
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *kCustomCellID = @"MyCellID";
    UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(160.0f, 2.0f, 30.0f, 20.0f)];//label for rowid
    UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(160.0f, 24.0f, 30.0f, 30.0f)];//label for counter
    label2.textColor = [UIColor grayColor];
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:kCustomCellID];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCustomCellID] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    if([self.dataArray count]>indexPath.row)
    {
        label1.text = [[self.dataArray objectAtIndex:indexPath.row] objectForKey:@"Lable1"];
        label2.text =[[self.dataArray objectAtIndex:indexPath.row] objectForKey:@"Lable2"]; 
    }
    else {
        label1.text = @"";
        label2.text =@"";
    }
    [cell.contentView addSubview:label1];
    [cell.contentView addSubview:label2];
    [label1 release];
    [label2 release];
    return cell;
}


#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   //implementation for row counter incrementer.
}
4

3 に答える 3

1

これを試して。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   //take dictionary object from dataArray at selected index
   //take Lable2 value as a string and convert it into integer and increment the integer value
   //now convert this incremented integer value into string
   //now save it new string in Lable2 for the object dictionary and add this dict object into dataArray at selected index
    NSMutableDictionary * tempDict = [self.dataArray objectAtIndex:indexPath.row];
    int tempLableInt = [[tempDict objectForKey:@"Lable2"] intValue];
    tempLableInt = tempLableInt +1;
    [tempDict setObject:[NSString stringWithFormat:@"%d",tempLableInt] forKey:@"Lable2"];
    [self.dataArray replaceObjectAtIndex:indexPath.row withObject:tempDict];
    [tableView reloadData];
}
于 2012-06-16T09:08:55.937 に答える
0

nsdictionary 値を設定するだけです。そのセット forkey は、uitableview didselectrowatindexpath 値です。for キー値に基づいて、値を増やします。

于 2012-06-16T09:01:58.960 に答える
0

次のようにして、クラスでこのプロパティを定義できます

NSMutableDictionary *dicCounter;

次に、あなたのdidSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [NSString stringWithFormat:@"%@,%@", indexPath.section, indexPath.row];
    //Get the old counter
    int counterForCell = [[dicCounter valueForKey:cellIdentifier] intValue];
    //increment it
    counterForCell++;
    //set it in the dictionary
    [dicCounter setValue:[NSNumber numberWithInt:counterForCell] forKey:cellIdentifier];
}
于 2012-06-16T09:11:19.587 に答える