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

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

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

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

 }

@property (nonatomic, assign) id  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];

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

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

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

29
задан Steve 8 January 2010 в 16:17
поделиться

2 ответа

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

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

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

- (IBAction) flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    NSLog(@"%@", onoff.on ? @"On" : @"Off");
}
29
ответ дан 28 November 2019 в 01:43
поделиться

Стив, прости, если я неправильно понял твой вопрос. Вы действительно создали 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];
16
ответ дан 28 November 2019 в 01:43
поделиться