2010-01-08 3 views
29

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

В 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 file, но ничего не происходит. Мне просто нужно настроить переключатель и сделать так, чтобы я мог контролировать, что он делает, от моего IBAction, который я настраиваю. Я знаю, что это неловко просто, но я не могу понять. Таким образом, любая помощь будет оценена! Благодаря

Edit 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"); 
} 

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

+0

Почему бы не использовать IB? И если вы не используете его, то почему вещи объявлены как IBOutlet и IBAction? – gerry3

+0

Ничего себе. Отличная точка. Я действительно хотел бы использовать IB, но, как я уже упоминал, я пытаюсь заставить это работать над представлением, которое не использует IB. Есть ли простой способ добавить xib-файл на экран, который просто заполняет uitableview и показывает ячейки информации? Спасибо – Steve

ответ

29

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

(а) Избавиться от местной декларации OnOff, и просто использовать свой экземпляр переменной

(б) Чугунные аргумент отправителя в -flip: как UISwitch, и доступ, который:

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

Спасибо! Это исправило мою проблему. – Steve

16

Стив, извините, если я неправильно понял ваш вопрос. Вы на самом деле создали 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]; 
+0

Эй, спасибо большое за вашу помощь. Это привело к появлению UISwitch, и это здорово!Но, похоже, он не работает полностью, см. Мое редактирование выше для кода. Спасибо – Steve

+0

Извините за тупую ошибку. Я исправил это (см. Комментарии Бена Готлиба). – Costique

+0

Это был замечательный ответ, чем вы очень @Costique! – cvursache

Смежные вопросы