iPhone,区分多个控件?

时间:2010-01-26 11:56:03

标签: objective-c cocoa-touch

设置iPhone的UI以区分同一类型的多个项目(即2个滑块)时,最好的方法是分配控件唯一的“标签”,然后在Xcode中查询它们。这是要走的路还是我错过了其他的东西?

-(IBAction)switchChanged:(UISwitch*)senderSwitch {
    if([senderSwitch tag] == 1) {
        NSLog(@"SwitchChanged: Engines");
    }
    ...

加里

2 个答案:

答案 0 :(得分:3)

嘿加里!我通常选择类似的方法,但我更喜欢使用整数常量而不是'原始'数字。这是一个例子:

const int VIEW_TAG_A_SWITCH = 1;
const int VIEW_TAG_OTHER_SWITCH = 2;

- (IBAction)switchChanged:(UISwitch*)senderSwitch {
    switch (senderSwitch.tag) {
        case VIEW_TAG_A_SWITCH:
            // do something
            break;
        case VIEW_TAG_OTHER_SWITCH:
            // do something else
            break;
    }
}

这使代码更具信息性,并帮助您在出于某种原因需要更改UIView标记值时处理这种情况(这样您只需在笔尖中更改一次,在代码中更改一次)。

当您需要使用一组控件时,使用枚举也非常方便。这是一个虚拟单选按钮组示例(类似于<input type="option" />):

enum GenderOptionButtons {
    kMaleGenderOptionButton = 10,
    kFemaleGenderOptionButton,
    kUndefinedGenderOptionButton,
    NUM_GENDER_OPTION_BUTTONS
}

- (IBAction)buttonDidTouchUpInside:(UIButton *)senderButton {
    for (int i = kMaleGenderOptionButton; i < NUM_GENDER_OPTION_BUTTONS; i ++) {
        [(UIButton *)[self.view viewWithTag:i] setSelected:NO];
    }

    senderButton.selected = YES;
}

答案 1 :(得分:1)

如果您没有直接引用(即IBOutlet)来控制,那么“标记”方法就可以了。

这种方法的一个优点是您可以使用不同类型的控件来调用相同的操作方法。这种方法的一个主要缺点是你必须在IB和XCode之间保持同步标记。