В по-видимому никогда конечном усилии узнать больше о разработке 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");
}
Каждый раз, когда переключатель работает, консоль должна продолжать читать, и когда прочь, консоль должна прочитать. Право? Каждый раз, когда я перемещаю его, это просто повторяется в консоли, прочь. Если на, или если прочь, это только представляет. Что в мире я делаю неправильно? Помогите! Спасибо
Компилятор пытается вам помочь. Вы переопределяете переменную экземпляра onoff в вашем viewDidLoad;
, таким образом, она никогда не устанавливается. В вашем методе -flip: вы ссылаетесь на нулевой контроллер. Есть два способа исправить это:
(a) Избавьтесь от локального объявления onoff и просто используйте свою переменную экземпляра
(b) Приведите аргумент отправителя в -flip: как UISwitch
и получите доступ к этому:
- (IBAction) flip: (id) sender {
UISwitch *onoff = (UISwitch *) sender;
NSLog(@"%@", onoff.on ? @"On" : @"Off");
}
Стив, прости, если я неправильно понял твой вопрос. Вы действительно создали 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];