0

こんにちは、UITableView があり、UIStepper と UILabel を含むセルを動的に挿入しています。UILabel は UIStepper の値を示します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(!cell)
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

    [cell.textLabel setText:[self.myarray objectAtIndex:indexPath.row]];

    UIStepper *stepper = [[UIStepper alloc]init];

    UILabel *label = [[UILabel alloc]init];
    label.text = [NSString stringWithFormat:@"%.f", stepper.value];

    [cell addSubview:stepper];
    [cell addSubview:label];

    [stepper addTarget:self action:@selector(incrementStepper:) forControlEvents:UIControlEventValueChanged];
    return cell;
}

明確にするためにフォーマットを行う上記の行のいくつかを削除しましたが、これは機能し、すべて問題ありません。

-(void)incrementSkillStepper:(id)sender
{
    UIStepper *stepper = (UIStepper*)sender;
    //set the label that is in the same cell as the stepper with index stepper.value.
}

特定のセルのステッパーをクリックすると、同じセルのラベルをインクリメントしたいのですが、私の問題は addtarget が機能する方法です-この場合はステッパーである送信者のみをイベントに送信できます。動的に作成されたラベルにはアクセスできません。incrementStepper デリゲート メソッドからラベルのテキストを設定する方法を知っている人はいますか?

4

3 に答える 3

0

UIStepper に indexPath.row としてタグを設定し、indexPath.row+999 としてラベルにタグを設定できます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIStepper *stepper = [[UIStepper alloc]init];
    stepper.tag = indexPath.row;

    UILabel *label = [[UILabel alloc]init];
    label.tag = indexPAth.row + 999;

    //......
}

UIStepper のデリゲート メソッドでは、次のようにそのセルでラベルを見つけることができます

-(void)incrementSkillStepper:(id)sender
{
    UIStepper *stepper = (UIStepper*)sender;
    UILabel *label = (UILabel *)[self.view viewWithTag:sender.tag + 999];
    //now this is same label as you want. Now you can change the value of label as you want

}
于 2013-05-22T06:36:57.743 に答える
0

ステッパーの値でモデルを更新してから、モデルのその値に基づいてラベルの値を設定する必要があります。ステッパーに cellForRowAtIndexPath で indexPath.row と等しいタグを付け、ステッパーのアクション メソッドで、モデルのプロパティの値をステッパーの値に設定する必要があります。次に、同じ indexPath で行をリロードします。

(void)incrementSkillStepper:(UIStepper *)sender {
    NSInteger row = sender.tag;
    [self.theData[row] setObject:@(sender.value) forKey:@"stepperValue"];
    [self.tableView reloadRowsAtIndexPaths: @[row] withRowAnimation:UITableViewRowAnimationNone];
}

cellForRowAtIndexPath では、ラベルを設定するために次のようなものがあります。

    UILabel *label = [[UILabel alloc]init];
    label.text = [NSString stringWithFormat:@"%@", self.theData[indexPath.row][@"stepperValue"]];

この例では、セルにデータを入力するために必要なすべてのデータを含む辞書の配列 (theData) があると想定しています。ディクショナリ キーの 1 つである「stepperValue」は、ステッパー値を NSNumber として格納するために使用されます。

于 2013-05-22T06:45:56.283 に答える