用UISwitch更改if语句

时间:2014-03-18 22:14:32

标签: ios objective-c ios7

您好我正在开发一个应用程序,您有一个带有UISwitch的viewController,我已经使用了NSLog。我的问题是你是否可以通过创建一个BOOL来改变其他viewControllers中的东西,然后在if语句中引用它?下面是一些代码:

UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(251, 111, 0, 0)];
[mySwitch addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged];
[mySwitch setOnTintColor:UIColorFromRGB(0xac1f2d)];
[self.view addSubview:mySwitch];


- (void)changeSwitch:(id)sender{

if([sender isOn]){
    NSLog(@"Switch is ON");
} else{
    NSLog(@"Switch is OFF");
} 

4 个答案:

答案 0 :(得分:0)

如果要在另一个ViewController中更改某些内容,可以通过创建对其他ViewController的引用来完成此操作。 如果将公共属性添加到“其他”ViewController,则可以在if语句中更改它们。

答案 1 :(得分:0)

我正在解释您的问题,询问您是否可以使用现有视图控制器上的开关更改另一个视图控制器的状态。答案是肯定的。

你有条件决定开关的状态。要建立连接,要将属性添加到要推送的视图控制器。当您实例化新视图控制器时,在检查if([mySwitch isOn])之后设置其属性的状态(创建一个IBOutlet以便您可以随时检查它而不是响应IBAction),然后推送它。如果您要通过segue到达那里,您可以在prepareForSegue:中检查交换机的状态。

以下是您在prepareForSegue:

中设置属性的方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"uniqueSegueIdentifierFromIB"])
    {
        // Get a reference to the DestinationViewController
        DestinationViewController *destinationVC = [segue destinationViewController];

        // DestinationViewController has public @property (nonatomic) BOOL configurationOption;
        if([mySwitch isOn])
        {
            [destinationVC setConfigurationOption:YES];
        } 
        else 
        {
            [destinationVC setConfigurationOption:NO];
        }
    }
}

检查viewDidLoad:中新视图控制器属性的状态,以决定如何配置它。

答案 2 :(得分:0)

假设你有另一个VC,OtherViewController。 在其中创建一个BOOL属性,如:

@property(nonatomic) BOOL flag;

OtherViewController的.m文件中为属性实现setter:

-(void)setFlag:(BOOL)flag {
    _flag = flag;
    if(_flag) { //if flag is true do something
        //...........
    }
    else { //do anything else
        //........
    }
}

现在在第一个视图控制器中创建一个OtherViewController实例的引用,其中包含该开关。说它是由当前视图控制器中名为other的属性引用的。然后,您可以根据当前视图控制器中的开关值,在OtherViewController上触发所需的操作,如下所示:

- (void)changeSwitch:(UISwitch*)sender{
    self.other.flag = sender.on;
}

这将调用flag中的OtherViewController属性的设置者,并根据您在那里写的内容。

当然,OtherViewController的实例不应在两者之间解除分配。

答案 3 :(得分:0)

扩展Stefan answer

您需要将property添加到要更改的ViewController

所以在ViewControllerA中你会导入ViewControllerB标题:

#import "ViewControllerB.h"

这样您就可以在方法

中更改该属性
- (void)changeSwitch:(id)sender{
ViewControllerB *viewcontroller = [[ViewControllerB alloc]init]];
  if([sender isOn]){
      viewcontroller.log = @"Switch is ON";
  } else{
      viewcontroller.log = @"Switch is OFF";
  } 

 }