单元格的结果显示在其他单元格中

时间:2015-07-09 04:51:16

标签: ios

我正在开发一个IOS应用程序。一行包含TextField和一些textview。当为任何行更改TextField的值时,TextField中的数字应与Label中的数字相乘,并在同一行中显示,并显示在同一行中的另一个Label中。实际发生的是,这些值与另一个显然是随机的单元格的标签相乘。

enter image description here

图像显示实际发生的情况。这个问题让我困惑了好几天,而且我的智慧结束了。

我尝试使用didSelectRowAtIndex和从Tableview中获取行 indexPath.row。结果令人困惑,因为前两行的行索引显示为0。

IndexPath在cellForRowAtIndexPath中更正但在Textfield方法中是错误的[ - (void)changedvalue:(UITextField *)textfield]。什么可能是什么?

非常感谢任何帮助或建议。提前谢谢。

//代码

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

        return _fetchedobj.count;
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *MyIdentifier = @"MyReuseIdentifier";
        UITableViewCell *cell = [myTable dequeueReusableCellWithIdentifier:MyIdentifier];

        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:MyIdentifier];
        }
        data = [_fetchedobj objectAtIndex:indexPath.row];

        _quantity = [[UITextField alloc] initWithFrame:CGRectMake(5.0f,28.0f,50.0f , 30.0f)];
        [_quantity setTag:indexPath.row];
        [_quantity setFont:[UIFont systemFontOfSize:14.0f]];
        [_quantity setTextAlignment:NSTextAlignmentCenter];
        _quantity.backgroundColor = [UIColor whiteColor];
        [_quantity setAdjustsFontSizeToFitWidth:YES];
        [_quantity addTarget:self action:@selector(changedvalue:) forControlEvents:UIControlEventAllEditingEvents];
        NSString *q_value = [data valueForKey:@"quantity"];
        NSInteger q_value1 = [q_value integerValue];
        [_quantity setText:[NSString stringWithFormat:@"%li",(long)q_value1]];
        [cell addSubview:_quantity];

           _total1 = [[UILabel alloc ]initWithFrame:CGRectMake(50.0f, 58.0f, 80.0f, 25.0f)];
        [_total1 setFont:[UIFont systemFontOfSize:14.0f]];
        [_total1 setTag:1];
        [_total1 setTextAlignment:NSTextAlignmentCenter];
        [_total1 setAdjustsFontSizeToFitWidth:YES];
        _total1.backgroundColor = [UIColor whiteColor];
        NSString *totalAmount = [data valueForKey:@"amount"];
        NSInteger total_Amount = [totalAmount integerValue];
        [_total1 setText:[NSString stringWithFormat:@"%li",(long)total_Amount]];
        [cell addSubview:_total1];

    - (void) changedvalue: (UITextField *)textfield
    {
        NSLog(@"%ld",(long)[textfield tag]);
        NSString *text = [textfield text];
        NSInteger text1 = [text integerValue];
        NSString *changevalue =  [dict objectForKey:@"_max_purchases_per_user"];
        NSInteger valueChange =  [changevalue integerValue];
        NSString *userPurchase = [dict objectForKey:@"_max_purchases"];
        NSInteger itemPurchase = [userPurchase integerValue];
        NSString *amount =  [data valueForKey:@"amount"];
        NSInteger amount1 = [amount integerValue];
        NSInteger minValue=MIN(valueChange, itemPurchase);
        if (text1 > minValue) {
           NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[textfield tag] inSection:0];
            UITableViewCell *cell = (UITableViewCell *) [myTable cellForRowAtIndexPath:indexPath];
         //   UITextField * field=cell.subviews[1];

       //     field.text = [NSString stringWithFormat:@"%li",minValue * amount1];
            NSLog(@"%@",cell);

            cell.textLabel.text = [NSString stringWithFormat:@"%li",minValue * amount1];

            //[_quantity setText:[NSString stringWithFormat:@"%li",(long)minValue]];
            //[ _total1 setText:[NSString stringWithFormat:@"%li",minValue * amount1]];
        }else{
            [_total1 setText:[NSString stringWithFormat:@"%li",text1 * amount1]];
        }
        //    NSString *Amount =[data valueForKey:@"amount"];
        //    NSNumber *aNum = [NSNumber numberWithInteger:[Amount integerValue]];
        //
        //    [_total1 setText:[NSString stringWithFormat:@"%ld",([i integerValue] * [aNum integerValue])]];
}

1 个答案:

答案 0 :(得分:0)

您迫切需要考虑细胞重复使用。 " dequeueWithReuseIdentifier"" dequeueWithReuseIdentifier"确实。因此,如果您有100行,并且一次最多可见10行,则使用相同的单元格将有10行。

当dequeueWithReuseIdentifier没有返回nil时,你绝对不能创建新的文本字段。它返回一个已经为其创建的所有文本字段的单元格,从上一次单元格用于不同或相同的行开始。

如果用户可以添加或删除行,则使用indexPath.row作为索引是灾难的处方。假设您正在显示第10行,然后我删除第8行。您的单元格现在位于第9行,但是有一个标记为第10行。