Вопрос

В, казалось бы, бесконечных попытках узнать больше о разработке iPhone, я поигрался с некоторыми исходными кодами, доступными на веб-сайте разработчиков Apple.Конкретный пример, с которым я работаю, — это книги основных данных, найденные здесь.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");  
 }

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

Это было полезно?

Решение

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

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

(б) Приведите аргумент отправителя к -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];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top