Я думаю, что ошибка следующая:
@interface SettingsViewController : UIViewController <UINavigationControllerDelegate>
{
UISwitch *gravaSwitch;
...
}
@property (retain, nonatomic) IBOutlet UISwitch *gravaSwitch;
...
@end
Заполнитель IBOutlet должен быть вставлен в @property. Измените код и попробуйте снова подключить розетку.
Edit:
Попробуйте создать свой 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];
В том же контроллере, но вне метода 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]
}
Вы можете вызвать self.gravaSwitch = nil;
также в методе viewDidUnload
.
В качестве альтернативы вы можете установить gravaSwicth для назначения политики следующим образом. В этом случае вам не нужно звонить self.gravaSwitch = nil;
как dealloc
и / или viewDidUnload
.
@property (assign, nonatomic) UISwitch *gravaSwitch;
Надеюсь, это поможет.
Редактировать 2:
Этот код работает для меня. Это реализация (файл .m) для MyViewController.
@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
помните, чтобы позвонить self.gravaSwicth = nil
в dealloc в MyViewController.m !!