我正在开发一个IOS应用程序。一行包含TextField和一些textview。当为任何行更改TextField的值时,TextField中的数字应与Label中的数字相乘,并在同一行中显示,并显示在同一行中的另一个Label中。实际发生的是,这些值与另一个显然是随机的单元格的标签相乘。
。
图像显示实际发生的情况。这个问题让我困惑了好几天,而且我的智慧结束了。
我尝试使用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])]];
}
答案 0 :(得分:0)
您迫切需要考虑细胞重复使用。 " dequeueWithReuseIdentifier"" dequeueWithReuseIdentifier"确实。因此,如果您有100行,并且一次最多可见10行,则使用相同的单元格将有10行。
当dequeueWithReuseIdentifier没有返回nil时,你绝对不能创建新的文本字段。它返回一个已经为其创建的所有文本字段的单元格,从上一次单元格用于不同或相同的行开始。
如果用户可以添加或删除行,则使用indexPath.row作为索引是灾难的处方。假设您正在显示第10行,然后我删除第8行。您的单元格现在位于第9行,但是有一个标记为第10行。