为什么标签从不将以前的值替换为新值?
why the label never replace the previous value to new value?
标签在我的表格视图中:
UILabel *label1;
label1=[[UILabel alloc]initWithFrame:CGRectMake(500,75, 50, 50)];
label1.text=[arr_count objectAtIndex:indexPath.row];
[label1 setTranslatesAutoresizingMaskIntoConstraints:NO];
label1.tag=100;
[cell addSubview:label1];
此处使用按钮操作增加
- int tagValue=[[arrCount objectAtIndex:click.tag] intValue];
if(tagValue <=5)
{
tagValue++;
NSNumber *num=[NSNumber numberWithInt:click.tag];
[arrCount replaceObjectAtIndex:click.tag withObject:num];
NSLog(@"increment %@",arrCount);
}
NSIndexPath *ind=[NSIndexPath indexPathWithIndex:click.tag];
label2.text = arrCount[click.tag];
[self.mTableView.tableView reloadInputViews];
}
增加值,我将它存储到一个 array.the 数组值给 label.i 我提到这个问题作为图像。
在此处输入图片描述 []
1
我对你的代码进行了一些重构,它似乎可以工作:
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:@[@0, @1, @2, @3, @4, @5, @6, @7, @8, @9]];
NSLog(@"original %@", array);
for (int i = 0; i < array.count; i++) {
int value = [array[i] intValue];
value += 1;
[array replaceObjectAtIndex:i withObject:@(value)];
NSLog(@"incremented %@", array);
}
输出:
original (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
incremented (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
还有一些注意事项:
- 这是切换到现代 obj-c 的最佳时机。写
label1.text=[arr_count[indexPath.row];
或 arr_count[click.tag]
。
- 您的代码不安全。您的应用程序可能会因为索引不足而崩溃。在获取 tagvalue 之前(顺便说一句,你应该根据 obj-c 风格称它为 tagValue)你应该检查数组是否包含这么多对象
- 正确命名以提高代码的可读性:
arr_count
是一个坏名字,第一在 objc 中我们不在名称中使用 _
,第二我们不使用快捷方式,第三它建议它是一个计数器 - 数字,而不是数组
tagvalue
也不好,0字后的每个字都要大写,所以应该是tagValue
.
- 最后,在数组中保留
NSNumber
而不是 NSString
和数字值不是更好吗?更多格式,但更正确!
所以现在让我们修复真正的错误:不仅您必须交换数组中的值,而且您必须在交换数组中的值后更新标签的值 - 这就是它不起作用的原因。 label.text 从数组中复制值,如果您更新数组则不会更新。您需要根据您的数组手动更新标签。
所以在你的代码之后你应该写:
label1.text = arr_count[click.tag];
不过,我强烈建议您按照上述几点重构您的代码,以使您的代码更好并提高您的开发人员技能:)
标签在我的表格视图中:
UILabel *label1;
label1=[[UILabel alloc]initWithFrame:CGRectMake(500,75, 50, 50)];
label1.text=[arr_count objectAtIndex:indexPath.row];
[label1 setTranslatesAutoresizingMaskIntoConstraints:NO];
label1.tag=100;
[cell addSubview:label1];
此处使用按钮操作增加
- int tagValue=[[arrCount objectAtIndex:click.tag] intValue];
if(tagValue <=5)
{
tagValue++;
NSNumber *num=[NSNumber numberWithInt:click.tag];
[arrCount replaceObjectAtIndex:click.tag withObject:num];
NSLog(@"increment %@",arrCount);
}
NSIndexPath *ind=[NSIndexPath indexPathWithIndex:click.tag];
label2.text = arrCount[click.tag];
[self.mTableView.tableView reloadInputViews];
}
增加值,我将它存储到一个 array.the 数组值给 label.i 我提到这个问题作为图像。
在此处输入图片描述 [
1
我对你的代码进行了一些重构,它似乎可以工作:
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:@[@0, @1, @2, @3, @4, @5, @6, @7, @8, @9]];
NSLog(@"original %@", array);
for (int i = 0; i < array.count; i++) {
int value = [array[i] intValue];
value += 1;
[array replaceObjectAtIndex:i withObject:@(value)];
NSLog(@"incremented %@", array);
}
输出:
original (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
incremented (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
还有一些注意事项:
- 这是切换到现代 obj-c 的最佳时机。写
label1.text=[arr_count[indexPath.row];
或arr_count[click.tag]
。 - 您的代码不安全。您的应用程序可能会因为索引不足而崩溃。在获取 tagvalue 之前(顺便说一句,你应该根据 obj-c 风格称它为 tagValue)你应该检查数组是否包含这么多对象
- 正确命名以提高代码的可读性:
arr_count
是一个坏名字,第一在 objc 中我们不在名称中使用_
,第二我们不使用快捷方式,第三它建议它是一个计数器 - 数字,而不是数组tagvalue
也不好,0字后的每个字都要大写,所以应该是tagValue
.
- 最后,在数组中保留
NSNumber
而不是NSString
和数字值不是更好吗?更多格式,但更正确!
所以现在让我们修复真正的错误:不仅您必须交换数组中的值,而且您必须在交换数组中的值后更新标签的值 - 这就是它不起作用的原因。 label.text 从数组中复制值,如果您更新数组则不会更新。您需要根据您的数组手动更新标签。
所以在你的代码之后你应该写:
label1.text = arr_count[click.tag];
不过,我强烈建议您按照上述几点重构您的代码,以使您的代码更好并提高您的开发人员技能:)