Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 对象c中的动态名称标签_Ios_Iphone_Objective C_Xcode - Fatal编程技术网

Ios 对象c中的动态名称标签

Ios 对象c中的动态名称标签,ios,iphone,objective-c,xcode,Ios,Iphone,Objective C,Xcode,我是iOS开发新手,只是有个简单的问题。我正在创建一个有100个UILabel的应用程序。每个标签编号为0到99。问题是我不想对所有100个标签都这样做 output1.text = [[NSString alloc] initWithFormat:@"1"]; output2.text = [[NSString alloc] initWithFormat:@"2"]; ..... output100.text = [[NSString alloc] initWithFormat:@"100"]

我是iOS开发新手,只是有个简单的问题。我正在创建一个有100个UILabel的应用程序。每个标签编号为0到99。问题是我不想对所有100个标签都这样做

output1.text = [[NSString alloc] initWithFormat:@"1"];
output2.text = [[NSString alloc] initWithFormat:@"2"];
.....
output100.text = [[NSString alloc] initWithFormat:@"100"];
相反,我想更动态地做这件事。下面我尝试使用循环来动态创建字符串。例如,通过在“output”的末尾添加“1.text”,我得到了字符串“output1.text”

for(int i=0;i<100;i++){
outputNameString=[NSMutableString stringWithCapacity:0];
[outputNameString设置字符串:@“output”];
[outputNameString appendString:[NSString stringWithFormat:@“%i.text”,i+1];
outputNameString=[[NSString alloc]initWithFormat:@“%@”,i];
}

“output1”到“output100”在接口部分正确声明并正确合成。这里有没有我遗漏的东西,或者这根本不可能?如果您创建标签,将不胜感激。

将不胜感激。。从lets say(100--200)设置标签

所以。 像这样初始化标签

 for (int i=0; i< 100; i++) {

UILabel *label = [[UILabel alloc] init] ;
// label formatting code here...

label.tag = i+100;
   }
for(int i=0;i<100;i++){
UILabel*label=[[UILabel alloc]init];
//标签格式化代码在这里。。。
label.tag=i+100;
}
然后像这样获取标签..并设置其文本

for (int i=0; i< 100; i++) {

UILabel *myLabel = (UILabel *)[self.view viewWithTag:i+100]; // get the label with tag
myLabel.text = [NSString stringWithFormat:@" Label %d",i+1"];
}
for(int i=0;i<100;i++){
UILabel*myLabel=(UILabel*)[self.view viewWithTag:i+100];//获取带有标记的标签
myLabel.text=[NSString stringWithFormat:@“标签%d”,i+1”];
}
这应该很有效。。
问题是什么?

获取具有“变量”名称的变量的方法是数组

您可以执行以下两种操作之一:

UILabel *output[100];
for(NSInteger i = 0; i < 100; i++){
  output[i] = [[UILabel alloc] ...];
}
另一种方式是:

NSMutableArray *outputLabels = [[NSMutableArray alloc] initWithCapacity:100];
for(NSInteger i = 0; i < 100; i++){
  UILabel *label = [[UILabel alloc] ...];
  [outputLabels addObject:label];
}

通常,您应该阅读有关C阵列的信息,然后阅读有关NSArray和NSMutableArray的文档。

如果您有一个带有所有标签的阵列(
NSArray
),这是一个解决方案:

for (int i=0; i< 100; i++) {
    UILabel *label = [arrayOfLabels objectAtIndex:i];
    label.text = [NSString stringWithFormat:@"output.%d.text", i+1];
}
使用C数组,它稍微短一点(
labels[i]
而不是
[labels objectAtIndex:i]

@接口对象:超级对象{
UILabel**标签;
}
@结束
@实现对象
-(void)创建slabel的方法
{
标签=malloc(100*sizeOf(UILabel*);
对于(NSInteger i=0;i<100;i++){
标签[i]=[[UILabel alloc]…];
标签[i].text=[NSString stringWithFormat:@“输出。%d.text”,i+1];
[视图添加子视图:标签[i]]
}
}
-(无效)可访问的方法{
UILabel*label45=标签[45];
//做你的事。。。
}
-(无效)解除锁定{

对于(int i=0;i在iOS中,您可以通过标记视图来管理视图。因此,出于您的目的,您可以创建一个基本视图,在此基础上,您将添加带有适当标记的所有标签。稍后,每当您需要特定标签时,只需使用方法
viewWithTag
查询视图即可

以下是您如何实现它:

创建标签:

UIView *baseView = [[UIView alloc] init];
//keep its reference for later use.. you will need to make it instance variable if you want to access labels in other than this method.

for(int i=0;i<100;i++)
{
   UILabel *label = [[UILabel alloc] init];
   label.tag = i+1; //we are offsetting its value by 1 because tag=0 is for the baseview itself.
   label.text = <the text you wish to assign>;
   [baseView addSubview:label];
   [label release]; //if you are not using ARC.
   label = nil;
}
UILabel *label = (UILabel *)[baseView viewWithTag:<provide the tag value you wish to access>];
UIView*baseView=[[UIView alloc]init];
//保留其引用以供以后使用。如果要访问此方法以外的标签,则需要将其设为实例变量。

对于(inti=0;i当你说“每个标签编号为0到99”时,你的意思是他们有这些标签对吗? 如果是,则从1到100开始标记,而不是从0到99。 如果否,则为每个标签设置标记。(如果不知道标记是什么,请阅读中的“标记”属性)

然后,您可以在循环中轻松访问这些标签:

for(int i = 1; i <= 100; i++)
{
    [[self.view viewWithTag:i] setText:[NSString stringWithFormat:@"Output%d.text",i]];
}

用于(int i=1;i我可能会在这里的节目中迟到一点。我不太确定您是否要命名uilabels或设置uilabels的text属性?从您的示例代码来看,您似乎正在尝试设置文本,因为您已经说过您已经合成了它们。如果是这样,我可以用一行来命名该曲调,bob!kvc(键值编码)我想如果你最好的选择

for (int i=1; i< 101; i++)
{
    [self setValue:[NSString stringWithFormat:@"%i", i] forKeyPath:[NSString stringWithFormat:@"output%i.text", i]];
} 
如果你想设置标签,你可以用

for (int i=1; i< 101; i++)
    {
        [self setValue:i forKeyPath:[NSString stringWithFormat:@"output%i.tag", i]];
    } 

当然,如果你愿意的话,你可以把两个例程放在同一个for循环中。如果这是你想要的,我建议你把代码改成这个。这是迄今为止最有效的和“苹果式”的"这样做的方式。你可以随时改变周围的事物,并根据你想要的动态变化对其进行调整。这是一个非常酷的方法。一旦我弄明白了这一点,它在我的一个项目中减少了近500行代码。当你真正阅读文档时,你所学到的东西令人惊讶。

可能是重复的,或者实际上不是这样一个好主意,标记视图很容易,但查找可能会有点昂贵。
[view viewWithTag:n]
将查看
视图
的所有子视图,包括
视图
,并比较标签号。这意味着在最坏的情况下,您将进行100+99+98+…1比较。如果您想变得精明,请按照@EmilioPelaez建议的方式创建/访问它们。
UIView *baseView = [[UIView alloc] init];
//keep its reference for later use.. you will need to make it instance variable if you want to access labels in other than this method.

for(int i=0;i<100;i++)
{
   UILabel *label = [[UILabel alloc] init];
   label.tag = i+1; //we are offsetting its value by 1 because tag=0 is for the baseview itself.
   label.text = <the text you wish to assign>;
   [baseView addSubview:label];
   [label release]; //if you are not using ARC.
   label = nil;
}
UILabel *label = (UILabel *)[baseView viewWithTag:<provide the tag value you wish to access>];
for(int i = 1; i <= 100; i++)
{
    [[self.view viewWithTag:i] setText:[NSString stringWithFormat:@"Output%d.text",i]];
}
for (int i=1; i< 101; i++)
{
    [self setValue:[NSString stringWithFormat:@"%i", i] forKeyPath:[NSString stringWithFormat:@"output%i.text", i]];
} 
output1.text = @"1";
// repeat...
output100.text = @"100";
for (int i=1; i< 101; i++)
    {
        [self setValue:i forKeyPath:[NSString stringWithFormat:@"output%i.tag", i]];
    } 
output1.tag = 1;
// repeat...
output100.tag = 100;