一个UIView中的多个UISwitch项目

时间:2011-12-01 10:58:32

标签: objective-c cocoa-touch uiview uiswitch ibaction

  

可能重复:
  Handling multiple UISwitch controls in a table view without using tag property

我想问一下如何在一个UIview上配置7个UISwitch?我使用界面构建器放置开关,然后我想通过代码管理它们。管理这个的最好方法是什么。到目前为止,这是我的.h

#import <UIKit/UIKit.h>

@interface searchEditViewController : UIViewController{

    UISwitch *switchOne;
    UISwitch *switchTwo;
    UISwitch *switchFor;
    UISwitch *switchFive;
    UISwitch *switchSix;
    UISwitch *switchSeven;


}

@property(nonatomic,retain)UISwitch *switchOne;
@property(nonatomic,retain)UISwitch *switchTwo;
@property(nonatomic,retain)UISwitch *switchThree;
@property(nonatomic,retain)UISwitch *switchFour;
@property(nonatomic,retain)UISwitch *switchFive;
@property(nonatomic,retain)UISwitch *switchSix;
@property(nonatomic,retain)UISwitch *switchSeven;
-(IBAction)toggleButtonPressed:(id)sender;
@end

我想制作一个动作方法toggleButtonPressed,它将照顾其中的七个

2 个答案:

答案 0 :(得分:3)

为所有UISwitch个对象创建一个操作(我猜这是toggleButtonPressed)。现在,您可以在此方法中了解触发了哪个UISwitch:

-(IBAction)toggleButtonPressed:(id)sender{
    UISwitch *switchObj = (UISwitch*)sender;
    if (switchObj == self.switchOne){
        // do stuff
    }

    if (switchObj == self.switchTwo){
        // do stuff
    }

//    switch(switchObj.tag){
//        case 1:
//            // do stuff
//            break;
//        case 2:
//            // do stuff
//            break;
//    }
}

编辑。您可以将tag属性设置为某个值(从1到7),并将if-statement更改为switch-case

答案 1 :(得分:1)

@beryllium,你的方式确实有效,但你可能想尝试一些更优雅的东西。

相反,标记每个开关,然后标记if-then然后使用switch-case,因为您似乎已注释掉了。

以下是一个示例,请注意kUIActivityIndi​​catorViewStyleWhiteLarge实际上是我创建的常量并赋值#define kUIActivityIndicatorViewStyleWhiteLarge 1

- (IBAction)setSpinnerType:(UISwitch *)sender
{
    // switch based on tag value
    // turn other two switches off
    switch (sender.tag) {
        case kUIActivityIndicatorViewStyleWhiteLarge:
            self.spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
            [sender setOn:YES animated:YES];
            [self.whiteSwitch setOn:NO animated:YES];
            [self.graySwitch setOn:NO animated:YES];
            break;
        case kUIActivityIndicatorViewStyleWhite:
            self.spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
            [self.whiteLargeSwitch setOn:NO animated:YES];
            [sender setOn:YES animated:YES];
            [self.graySwitch setOn:NO animated:YES];
            break;
        case kUIActivityIndicatorViewStyleGray:
            self.spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
            [self.whiteLargeSwitch setOn:NO animated:YES];
            [self.whiteSwitch setOn:NO animated:YES];
            [sender setOn:YES animated:YES];
            break;
        default:
            break;
    }
}

如果你想按自己的方式去做,那没关系,但再次不那么理想。但是,如果你这样做,代码:

UISwitch *switchObj = (UISwitch*)sender;
    if (switchObj == self.switchOne){

是多余的。相反,你可以写下以下内容:

-(IBAction)toggleButtonPressed:(UISwitch *)sender{
    // UISwitch *switchObj = (UISwitch*)sender;
    if (sender == self.switchOne){
        // do stuff
    }

我希望有所帮助。

我创建了一个应用程序来测试不同颜色背景下的UIActivityIndi​​catorView样式,它使用滑块和开关。如果有人想看到带有IB组件的应用程序,请在此处输入网址:

https://github.com/asadquraishi/UIActivityIndicatorView-Test