所以我对Objective C(以及一般的编程)很新,我遇到了一个问题。 从本质上讲,我已经创建了一系列" train"每列火车都有一个UIButton实例。以下是该部分的相关部分 在视图中加载:
for (int i = 0; i < numTrains; i++) {
Train *newTrain = [[Train alloc] init];
UIButton *nButton = [[UIButton alloc] init];
//more lines to set frame, background, etc.
[nButton addTarget:self action:@selector(selectTrain:) forControlEvents:UIControlEventTouchUpInside];
newTrain.button = nButton;
[trainArray addObject:newTrain];
}
随后:
-(void)selectTrain:(UIButton*)sender {
//this is where I run into trouble
}
我想知道按钮所属的列车。这可能吗?如果是这样,它是如何完成的?
谢谢!
答案 0 :(得分:0)
我想到了两个想法。
1)您可以在创建按钮时设置标签属性。
nButton.tag = i;
火车将
[trainArray objectAtIndex:sender.tag];
2)您可以遍历trainArray以查找包含该特定按钮的Train对象
Train *trainWithButton;
for(Train *t in trainArray){
if t.button == sender{
trianWithButton = t;
}
}
答案 1 :(得分:0)
实现此目的的一种方法是给按钮tag
。然后,在selectTrain:
方法中,您可以将sender
对象转换为UIButton(UIButton *trainButton = (UIButton *)sender
)并使用trainButton.tag
获取标记。然后,您需要为Train对象分配tag
一些唯一属性。由于你有一个列车阵列(trainArray
),只需使用列车的索引作为按钮标签。你的循环将看起来像这样......
for (int i = 0; i < numTrains; i++) {
Train *newTrain = [[Train alloc] init];
UIButton *nButton = [[UIButton alloc] init];
//more lines to set frame, background, etc.
[nButton addTarget:self action:@selector(selectTrain:) forControlEvents:UIControlEventTouchUpInside];
newTrain.button = nButton;
button.tag = i;
[trainArray addObject:newTrain];
}
按钮动作方法......
- (void)selectTrain:(UIButton *)sender {
UIButton *trainButton = (UIButton *)sender
Train *theTrain = trainArray[trainButton.tag];
}