Como mencionado iPhone FirstApp: Adivinhe o número - Parte 1 vemos como fazer um aplicativo para o iPhone da Apple sem usar o Interface Builder! Na verdade, nós vamos eliminar arquivos físicos criado por Interface Builder, Xcode assistente. No final deste post, então, temos um pedido idêntico em todos os aspectos, ao obtido na primeira parte, com a diferença que nós vamos alcançar todos os nossos componentes visuais, incluindo a janela principal, completamente para código.
A aplicação já realizados, se você quiser apenas fazer o download, está disponível no meu repositório do Google Code:
Gostaria de apontar imediatamente como o ZIP deste exemplo com peso inferior a da última vez! ![]()
Criamos o projeto
Começamos criando o nosso projeto SecondApp (para distingui-lo de FirstApp), embora desta vez escolha Janela de aplicativos baseados em:

Agora vamos apagar tudo relacionado com o Interface Builder. : eliminatelo anche dal file system, quindi selezionate Also Move to Trash . Excluir o arquivo MainWindow.xib , localizado na pasta de Resources : também excluí-lo do sistema de arquivos, em seguida, selecione Também Mover para o Lixo. nella casella Main nib file base name : Selecione então o arquivo SecondoApp-info.plist e excluir a referência ao MainWindow nib nome da caixa de arquivo principal base:

Neste ponto não temos mais qualquer Windows, pelo menos até o Interface Builder. , e modifichiamo la funzione main() in questo modo: Então vamos abrir o arquivo main.m , situado em Other Sources , e modificar a função main() assim:
1 2 3 4 5 6 7 8 9 10 11 | int argc, char * argv [ ] ) { int main (int argc, char * argv []) { pool = [ [ NSAutoreleasePool alloc ] init ] ; NSAutoreleasePool * pool = [[ NSAutoreleasePool alloc] init]; / / Ao remover o arquivo. XIB perdemos o ponto de / / Delegado à APP, em seguida, passá-lo para "mão" UIApplicationMain ( argc, argv, nil , @ "SecondAppAppDelegate" ) ; int retVal = UIApplicationMain (argc, argv, nil, @ "SecondAppAppDelegate"); ; [Release Piscina]; retVal retorno; } |
Abra SecondAppAppDelegate.me então criar a janela principal em código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | void ) applicationDidFinishLaunching : ( UIApplication * ) application { - (Void) applicationDidFinishLaunching: (UIApplication *) {aplicativo / / Pega o tamanho da tela (320, 480) UIScreen mainScreen ] applicationFrame ] ; CGRect windowRect = [[Mainscreen UIScreen] applicationFrame]; / / Cria uma janela - como fizemos no Interface Builder bye bye [ [ UIWindow alloc ] initWithFrame : windowRect ] ; MainWindow UIWindow * = [[UIWindow alloc] initWithFrame: windowRect]; / / Definir o plano de fundo da janela para amarela, para diferenciar / / O pedido anterior FirstApp [ UIColor yellowColor ] ] ; [MainWindow SetBackgroundColor: [UIColor yellowColor]]; mainWindow ] ; [Self setWindow: MainWindow]; ; [Janela makeKeyAndVisible]; ; [MainWindow release]; } |
Você já pode testar o aplicativo, se você começar uma janela amarela você fez tudo certo!
, necessario solo se si usa Interface Builder. No arquivo SecondAppAppDelegate.h podemos eliminar IBOutlet , apenas necessária se você usa o Interface Builder. Também acrescentar aqui que o nosso variáveis globais, a última vez que tinha entrado no Controller. Em seguida, modificar o arquivo SecondAppAppDelegate.h :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Import <UIKit/UIKit.h> NSObject <UIApplicationDelegate> { @ SecondAppAppDelegate Interface: NSObject {<UIApplicationDelegate> UIWindow janela *; UITextField número *; UIButton botão *; numeroACaso int; } nonatomic, retain ) UIWindow * window; @ Property (não atômica, reter) UIWindow janela *; void ) controllaNumero; - (Void) getNumber; @ End |
, in quanto non stiamo usando Interface Builder. Mais uma vez nós preparamos a definição do método controllaNumero , como da última vez, mas nós eliminamos a indicação IBAction , porque você não está usando o Interface Builder.
Vamos construir a interface a partir do código
É hora de criar o código usando todos os componentes de nossa interface. ed inseriamo il seguente codice: Vamos voltar para o arquivo SecondAppAppDelegate.m , posizioniamoci antes [mainWindow release] e insira o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | / / Cria a barra de título [ [ UINavigationBar alloc ] initWithFrame : CGRectMake ( 0.0 , 0.0 , 320.0 , 44.0 ) ] ; UINavigationBar myNavigationBar * = [[UINavigationBar alloc] initWithFrame: CGRectMake (0.0, 0.0, 320,0, 44,0)]; myNavigationBar.barStyle = UIBarStyleDefault; [ [ UINavigationItem alloc ] initWithTitle : @ "Indovina un numero" ] ; UINavigationItem navigationItem * = [[UINavigationItem alloc] initWithTitle: @ "Acho que um número"]; navigationItem animated : NO ] ; [MyNavigationBar pushNavigationItem: navigationItem animado: NO]; myNavigationBar ] ; [Janela addSubview: myNavigationBar]; / / Criar o rótulo [ [ UILabel alloc ] initWithFrame : CGRectMake ( 10 , 50 , 300 , 80 ) ] ; UILabel myLabel * = [[UILabel alloc] initWithFrame: CGRectMake (10, 50, 300, 80)]; UIColor clearColor ] ; myLabel.backgroundColor = [UIColor clearColor]; ; myLabel.numberOfLines = 2; "iPhone ha pensato un numero da 1 a 10, prova ad indovinarlo?" ; myLabel.text = @ "iPhone criou um número de 1 a 10, tentar adivinhar?" myLabel ] ; [Janela addSubview: myLabel]; / / Criar a entrada de texto UITextField alloc ] initWithFrame : CGRectMake ( 10 , 120 , 300 , 30 ) ] ; = número de [[UITextField alloc] initWithFrame: CGRectMake (10, 120, 300, 30)]; numero.borderStyle = UITextBorderStyleRoundedRect; numero.textAlignment = UITextAlignmentCenter; numero.keyboardType = UIKeyboardTypeNumberPad; "Inserisci il numero" ; numero.placeholder = @ "Digite o número"; numero ] ; [Janela addSubview: número]; / / Cria o botão UIButton buttonWithType : UIButtonTypeRoundedRect ] ; button = [UIButton buttonWithType: UIButtonTypeRoundedRect]; 10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30); @ "Premi qui" forState : UIControlStateNormal ] ; [Button setTitle: @ "Clique Aqui" Forst: UIControlStateNormal]; self action : @selector ( controllaNumero ) forControlEvents : UIControlEventTouchUpInside ] ; Botão [AddTarget: acção de auto: @ selector (getNumber) forControlEvents: UIControlEventTouchUpInside]; bottone ] ; [Janela addSubview: Botão]; ; [MyLabel release]; ; [NavigationItem release]; ; [MyNavigationBar release]; |
della scorsa volta, subito dopo il [mainWindow release]; inseriamo: Desde o ' applicationDidFinishLaunching corresponde a viewDidLoad como da última vez, logo após a [mainWindow release]; inserir:
1 | + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; |
Agora nós podemos fazer é implementar o método controllaNumero , que será idêntico (além do protótipo) para que o tempo usado pela última vez:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | void ) controllaNumero { - (Void) {getNumber "Premuto bottone di controlla numero" ) ; NSLog (@ "número de controle pressionado o botão"); [ numero.text integerValue ] ; numeroInserito = int [numero.text integerValue]; message; NSString mensagem *; "Il numero inserito è %d" , numeroInserito ) ; NSLog (@ "O número digitado é% d", numeroInserito); numeroInserito <numeroACaso ) { if (numeroInserito <numeroACaso) { "Troppo basso..." ; message = @ "Too low ..."; ( numeroInserito> numeroACaso ) { Else} if (numeroInserito> numeroACaso) { "Troppo alto..." ; message = @ "Muito alto ..."; ( numeroInserito == numeroACaso ) { Else} if (numeroInserito numeroACaso ==) { "Bravo hai indovinato" ; message = @ "Bravo, você adivinhou-lo"; + arc4random ( ) % 10 ; numeroACaso arc4random = 1 + () 10%; "Numero pensato %d" , numeroACaso ) ; NSLog (@ "Número% d pensei," numeroACaso); } [ [ UIAlertView alloc ] UIAlertView alertMessaggio * = [[UIAlertView alloc] "Responso" initWithTitle: @ "Resposta" mensagem: mensagem Delegado: nil "OK" cancelButtonTitle: @ "OK" ] ; otherButtonTitles: nil]; ; [AlertMessaggio show]; ; [AlertMessaggio release]; "" ; numero.text @ = ""; } |
Estamos a fazer!
Conclusões e considerações
, proprio perchè volevo lasciarlo il più semplice e snello possibile e, anche, per dimostrare che non sono elementi sempre necessari. Este exemplo não fazer uso direto de um UIView ou UIViewController , só porque eu queria deixá-lo tão simples e aligeirados quanto possível e, também, para mostrar que os elementos não são sempre necessários. No entanto inserir objetos diretamente na janela pode ter algum sentido neste exemplo e outros contextos esporádicos. portano comunque benefici in tantissimi altri casi, ein alcuni sono praticamente indispensabili; come avremo modo di vedere in futuro. O uso de UIView e UIViewController trazer benefícios em muitos outros casos, porém, alguns são ein praticamente indispensável, como veremos no futuro.











Não há comentários para este post
Deixe um comentário