Подтвердить что ты не робот

Создание программы UISwitch Programmatically

В кажущейся бесконечной попытке узнать больше о развитии iphone, я играл с некоторым исходным кодом, доступным через веб-сайт разработчиков яблок. В конкретном примере, с которым я работаю, находятся Core Data Books, найдено здесь. DetailViewController и AddViewController сделаны программно, потому что для них нет xib файлов. Мой вопрос заключается в программном добавлении вещей в представление без использования IB. Я хочу поместить UISwitch под UITableView, который содержит подробную информацию о конкретной книге в DetailView. Как мне это сделать? Это то, что я пробовал до сих пор:

В AddViewController я настраиваю UISwitch:

@interface AddViewController : DetailViewController {
id <AddViewControllerDelegate> delegate;
UISwitch *onoff;

 }

@property (nonatomic, assign) id <AddViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISwitch *onoff;

Я также настраиваю IBAction:

- (IBAction)flip:(id)sender;

Затем я синтезирую его в файле AddViewController.m, но ничего не происходит. Мне просто нужно настроить переключатель и сделать так, чтобы я мог контролировать, что он делает, от моего IBAction, который я настраиваю. Я знаю, что это неловко просто, но я не могу понять. Таким образом, любая помощь будет оценена! Благодаря

Изменить 1

Итак, я внедрил код, как я был направлен в viewDidLoad, например:

   - (void)viewDidLoad {

[super viewDidLoad];    
  UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];

И он выдает два предупреждения о том, что локальная декларация 'onoff' скрывает переменную экземпляра. Но несмотря на то, что есть такие доходы, UISwitch всплывает очень хорошо, но когда я его перемещаю или использую, похоже, что он работает полностью. Для моего действия это выглядит так:

- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");  
else  NSLog(@"Off");  
 }

Всякий раз, когда переключатель включен, консоль должна читать, а когда выключена, консоль должна читать. Правильно? Каждый раз, когда я его перемещаю, он просто повторяется в консоли, выключается. Если оно включено, или если оно выключено, оно отображается только. Что в мире я делаю неправильно? Пожалуйста помоги! Благодаря

4b9b3361

Ответ 1

Компилятор пытается помочь вам. Вы переопределяете переменную экземпляра onoff в своем viewDidLoad; таким образом, что никогда не устанавливаете. В методе -flip: вы ссылаетесь на контроллер nil. Есть два способа исправить это:

(a) Избавьтесь от локального объявления onoff и просто используйте переменную экземпляра

(b) Передайте аргумент отправителя -flip: как UISwitch и получите доступ к этому:

- (IBAction) flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    NSLog(@"%@", onoff.on ? @"On" : @"Off");
}

Ответ 2

Стив, извините, если я неправильно понял ваш вопрос. Вы действительно создали UISwitch и добавили его в иерархию представлений? Реализация вашего контроллера -loadView или -viewDidLoad должна иметь следующий код:
// Use the ivar here
onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents: UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];
[onoff release];