获取实例的“所有者”

时间:2015-02-26 23:31:39

标签: objective-c object

所以我对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
}

我想知道按钮所属的列车。这可能吗?如果是这样,它是如何完成的?

谢谢!

2 个答案:

答案 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];
}