Objective c 如何像调用数组一样调用标签
我有10个不同的标签,从1分到10分。有没有办法像数组一样访问它们。例如ScoreX,在For循环中有一个x。如果您想将它们显式地作为数组,您可以创建自己的数组。Objective c 如何像调用数组一样调用标签,objective-c,xcode,Objective C,Xcode,我有10个不同的标签,从1分到10分。有没有办法像数组一样访问它们。例如ScoreX,在For循环中有一个x。如果您想将它们显式地作为数组,您可以创建自己的数组。 或者,您可以创建单个映射到标签的IBOutletCollection集合使用IBOutletCollection 您可以分配标签,然后在循环中使用标签查看标签 IBOutletCollection的问题在于不能保证数组的顺序。正如nshipster文章中提到的,顺序大致与它们在故事板中的连接顺序相对应,但在Xcode的不同实例中,有
或者,您可以创建单个映射到标签的
IBOutletCollection
集合使用IBOutletCollection
您可以分配标签,然后在循环中使用标签查看标签 IBOutletCollection的问题在于不能保证数组的顺序。正如nshipster文章中提到的,顺序大致与它们在故事板中的连接顺序相对应,但在Xcode的不同实例中,有一些实例没有出现这种情况。因此,使用IBOutletCollection不是一个好主意 相反,您应该使用IBOutletCollection和标记的组合
@property(非原子,强)IBOutletCollection(UILabel)NSArray*标签代码>
viewDidLoad
或awakeFromNib
中,迭代通过IBOutletCollection数组,并按其标记对该数组进行排序UIStackView
。如果标签是垂直或水平排列的,则可以将其嵌入堆栈视图中,然后使用arrangedSubviews
数组访问标签。阵列的顺序似乎与它们在堆栈视图中的排列顺序相匹配
作为对评论的回应,这里有一个你可以使用的解决方案
struct ScoreLabels{
让视图:UIView!
下标(索引:Int)->UILabel{
返回视图。将标签(索引)作为UILabel的视图;
}
}
var分数:分数标签{
返回ViewController.ScoreLabels(视图:self.view)
}
Score[index]
访问标签。确保您的索引是基于0的self.view
并使用self[index]
一个最简单的解决方案是定义一个函数并将其调用为Score(0)、Score(1)、Score(2)等
func分数(索引:Int)->UILabel?{
将self.view.viewWithTag(索引)作为UILabel返回
}
ObjC实施
可以在ViewController中实现此方法
- (id)objectAtIndexedSubscript:(NSInteger)idx
{
return [self.view viewWithTag:idx];
}
然后,您可以作为self[index]访问标签,其中index是标签的标记
如果不想在ViewController中执行此操作,则可以定义一个自定义类,将VC的视图作为参数传递给该类,然后使用Score属性,如下所示
@interface ScoreLabels : NSObject
@property (nonatomic, assign) UIView *parentView;
@end
@implementation ScoreLabels
-(id)initWithView:(UIView *)view {
self = [super init];
if (self != nil) {
self.parentView = view;
}
return self;
}
- (id)objectAtIndexedSubscript:(NSInteger)idx
{
return [self.parentView viewWithTag:idx];
}
@end
在视图控制器中定义一个属性
@属性(非原子,强)ScoreLabels*分数代码>
并用VC的观点初始化它
self.Score=[[ScoreLabels alloc]initWithView:self.view]代码>
并访问它作为
UILabel*label=(UILabel*)self.Score[1];
label.text=@“您的字符串”代码>可能是这样,特别是对于不习惯IB的人。但是IBOutletCollection也不是完美的,因为它的顺序没有保证。好的,我想我为标签设置了所有标签,但我仍然不知道如何在viewDidLoad中访问它们。该属性的名称为Score
,所有标签都有标签1到10。我想您在swift中键入了您的响应。。。我在回答中使用了Objective CAdded ObjC实现,我能够为(intx=0;x)使用