gpt4 book ai didi

ios - UISwitch 不工作

转载 作者:行者123 更新时间:2023-11-29 04:52:53 27 4
gpt4 key购买 nike

首先是我的 .h 文件:

@interface SettingsViewController : UIViewController <UINavigationControllerDelegate>
{
IBOutlet UISwitch *gravaSwitch;
...
}

@property (retain, nonatomic) UISwitch *gravaSwitch;
...
@end

.m 文件中的我的 viewDidload (有效):

...
// SET SWITCH BUTTON STATE
keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"TrafficApp" accessGroup:nil];

if ( [[keychain objectForKey:(id)kSecAttrAccount] isEqualToString:@"" ] )
[self.gravaSwitch setOn:FALSE];
else [self.gravaSwitch setOn:TRUE];
...

但是我的 switchChanged 不起作用,我不知道为什么。在 IB 上,一切都正确连接,它进入此方法,但 gravaSwitch 始终为 null。

- (IBAction)switchChanged:(id)sender
{
if ( self.gravaSwitch.on )
{
NSLog(@"IF");
[self.gravaSwitch setOn:FALSE animated:YES];
}
else
{
NSLog(@"ELSE");
[self.gravaSwitch setOn:TRUE animated:YES];
}
}

问候。

最佳答案

我认为错误如下:

@interface SettingsViewController : UIViewController <UINavigationControllerDelegate>
{
UISwitch *gravaSwitch;
...
}

@property (retain, nonatomic) IBOutlet UISwitch *gravaSwitch;
...
@end

IBOutlet 占位符必须插入到 @property 中。更改您的代码并尝试再次连接您的 socket 。

编辑:

尝试以编程方式创建 UISwitch。将您的 @property 更改如下:

@property (retain, nonatomic) UISwitch *gravaSwitch;

保留@synthesize不变。然后在您的 viewDidLoad 方法中添加您的 UISwitch(默认情况下 on 属性为 FALSE):

// Width and height are set to zero but they take the default dimension
UISwitch *yourSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 100, 0, 0)];
// add target and action
mySwitch addTarget:self action:@selector(yourCustomAction:) forControlEvents:UIControlEventValueChanged];
self.gravaSwitch = yourSwitch;
// don't forget because gravaSwitch has already a retain policy
[release yourSwitch];

// add the switch to the view
[self.view addSubview:self.gravaSwitch];

在同一 Controller 内,但在 viewDidLoad 方法外部,添加以下方法:

- (void)yourCustomAction:(id)sender
{
if ( self.gravaSwitch.on )
{
NSLog(@"IF");
[self.gravaSwitch setOn:FALSE animated:YES];
}
else
{
NSLog(@"ELSE");
[self.gravaSwitch setOn:TRUE animated:YES];
}
}

- (void)dealloc
{
self.gravaSwitch = nil; // remember to dealloc the switch!!
[super dealloc]
}

您也可以在 viewDidUnload 方法中调用 self.gravaSwitch = nil;

作为替代方案,您可以设置 gravaSwicth 来分配策略,如下所示。在这种情况下,您不必在 dealloc 和/或 viewDidUnload 中调用 self.gravaSwitch = nil;

@property (assign, nonatomic) UISwitch *gravaSwitch;

希望有帮助。

编辑2:

这段代码对我有用。这是 MyViewController 的实现(.m 文件)。

@synthesize gravaSwitch;

- (void)viewDidLoad
{
[super viewDidLoad];

UISwitch *yourSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 100, 0, 0)];
[yourSwitch addTarget:self action:@selector(yourCustomAction:) forControlEvents:UIControlEventValueChanged];

self.gravaSwitch = yourSwitch;

[yourSwitch release];

[self.view addSubview:self.gravaSwitch];
}

- (void)yourCustomAction:(id)sender
{
if(self.gravaSwitch.on)
{
NSLog(@"on");
}

else
{
NSLog(@"off");
}
}

其中 gravaSwicth 在 MyViewController.h 中声明如下:

@interface MyViewController : UIViewController
{
UISwitch *gravaSwitch;
...
}

@property (retain, nonatomic) UISwitch *gravaSwitch;
...
@end

记住在MyViewController.m中的dealloc中调用self.gravaSwicth = nil!!

关于ios - UISwitch 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com