Pergunta

Em um esforço aparentemente interminável para aprender mais sobre o desenvolvimento do iPhone, eu tenho jogado ao redor com algum do código fonte disponível através do site maçãs desenvolvedor. O exemplo particular, eu estou trabalhando com é Core Data Books, encontrada aqui . O DetailViewController, eo AddViewController são feitas através de programação, porque não há nenhum arquivo xib para eles. A minha pergunta é sobre a adição programaticamente as coisas para uma visão sem o uso de IB. Eu quero colocar um UISwitch sob o UITableView que contém as informações detalhadas sobre um determinado livro na DetailView. Como eu faço isso? Isto é o que eu tentei até agora:

Na configuração AddViewController, eu o UISwitch:

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

 }

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

Eu também configurar uma IBAction:

- (IBAction)flip:(id)sender;

Então eu sintetizá-lo no arquivo AddViewController.m, mas nada acontece. Eu só preciso de configurar a chave e torná-lo para que eu possa controlar o que ele faz de minha IBAction que a instalação I. Eu sei que isto é embaraçosamente simples, mas eu não consigo entender. Então, qualquer ajuda seria apreciada! Graças

Editar 1

Então, eu implementei o código como I foi dirigido no viewDidLoad, assim:

   - (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];

E ele lança duas advertências dizendo que a declaração de local do 'onoff' esconde a variável de instância. Mas mesmo que haja esses ganhos, o UISwitch aparece muito bem, mas quando eu movê-lo ou usá-lo, ele não se parece com ele está funcionando plenamente. Para minha ação parecida com esta:

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

Sempre que o interruptor está ligado, o console deve ler, e quando o seu fora, o console deve ler off. Certo? Sempre que eu movê-lo, ele apenas repete no console, off. Se a sua, ou se o seu fora, ele só mostra fora. O que no mundo que eu estou fazendo errado? Por favor ajude! Graças

Foi útil?

Solução

O compilador está tentando ajudá-lo. Você está substituindo a variável de instância onoff em sua viewDidLoad; assim, isso nunca ficando set. Em sua -flip: método, você está fazendo referência a um controlador nulo. Há duas maneiras de corrigir isto:

(a) Livrar-se da declaração de local do onoff, e usar apenas sua instância variável

(b) Elenco do argumento remetente para -flip: como um UISwitch e acesso que:

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

Outras dicas

Steve, me desculpe se eu não entendi sua pergunta. Será que você realmente criar o UISwitch e adicioná-lo à hierarquia vista? -loadView ou -viewDidLoad implementação do seu controlador deve ter um código como o seguinte:

// 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];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top