Arquivo Julho de 2009


iPhone: criar uma forma de responder aos eventos que atravessam classe

Normalmente, um evento, que nada mais é do que uma mensagem é fixo (definido e implementado) na mesma classe ou contexto, a função ou procedimento "chamador". o in un UIViewController . Por exemplo, se adicionar um botão UIButton via código (de programação), podemos encontrar a nossa classe em um UIView ou um UIViewController . Em ambos os casos, a atribuição de tarefas e de inicialização do botão será seguido pela definição de target que devem receber uma mensagem quando ele "clica" no botão, digite:

1
2
3
4
5
6
7
8
9
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton botão * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
10 , 180 , 300 , 30 ) ; bottone.frame = CGRectMake (10, 180, 300, 30);
@ "Press me" forState : UIControlStateNormal ] ; [Button setTitle: @ "Press-me" Forst: UIControlStateNormal];
/ / Decida quem deve receber a mensagem UIControlEventTouchUpInside
self action : @selector ( onButtonClicked ) forControlEvents : UIControlEventTouchUpInside ] ; Botão [AddTarget: acção de auto: @ selector (onButtonClicked) forControlEvents: UIControlEventTouchUpInside];
/ / ...
void ) onButtonClicked { - (Void) {onButtonClicked
/ / ...
}

Linha 5, que decide o código mostrado acima (o objeto) e que (método) "Chamada" quando o nosso botão é pressionado. No exemplo acima, também é sabido que o ajuste da pressão da mensagem é enviada para o método onButtonClick implementada abaixo, então parte do mesmo contexto (ou classe). potremmo inviare il nostro messaggio ad un qualsiasi altro oggetto, posto quindi al difuori del contesto in uso. A primeira consideração é óbvio que podemos fazer, então, é que, alterando os parâmetros de self e action , podemos enviar nossa mensagem para qualquer outro objeto, em seguida, coloque na difuori contexto em uso. : Aqui está um exemplo: uma classe UIApplicationDelegate criar um UIViewController :

1
2
3
4
5
/ /
/ / MyAppDelegate.m
/ /
SplashScreenController alloc ] ; splashScreenController = [SplashScreenController alloc];
splashScreenController.view ] ; [Janela addSubview: splashScreenController.view];

associata al UIViewController stesso: O SplashScreenController expõe um método que permite animar o UIView associados UIViewController mesmo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown { - (Void) {animateBackgroundDown
nil context : nil ] ; [UIView beginAnimations: contexto nil: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
self ] ; [SetAnimationDelegate UIView: self];
@selector ( onAnimationFinished ) ] ; [UIView setAnimationDidStopSelector: @ selector (onAnimationFinished)];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [UIView commitAnimations];
}
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "Animation está consumado");
}

. O código acima mostra um método definido dentro da classe SplashScreenController tipo UIViewController . ) onAnimationFinished definito più sotto, facente parte sempre della classe SplashScreenController . Ele não faz nada, mas animar o UIView animando-o para baixo, e quando a animação for concluída, ligue para (enviar uma mensagem para si - daí self ) onAnimationFinished definido abaixo, é parte da classe sempre SplashScreenController . , non saremo informati della fine dell'animazione: Segue-se que no nosso myAppDelegate , quando invocamos o método animateBackgroundDown , não vamos ser informado do fim da animação:

1
2
3
4
/ /
/ / MyAppDelegate.m
/ /
; [SplashScreenController animateBackgroundDown];

O que pode querer, ao contrário, é criar uma nova versão do animateBackgroundDown que me diga para onde enviar a mensagem no final da animação, e qual o método a ser chamado. Na prática, quer certificar-se de escrever na nossa classe myAppDelegate :

1
2
3
4
5
6
7
8
/ /
/ / MyAppDelegate.m
/ /
self selector : @selector ( onAnimationFinished ) ] ; [SplashScreenController animateBackgroundDown: seletor self: @ selector (onAnimationFinished)];
/ / ...
void ) onAnimationFinished { - (Void) {onAnimationFinished
"Animazione terminata" ) ; NSLog (@ "Animation está consumado");
}

, bensì in myAppDelegate . Desta vez, o método onAnimationFinished não está no UIViewController , mas em myAppDelegate . nel modo seguente: Para isso basta alterar o método de animateBackgroundDown em UIViewController como segue:

1
2
3
4
5
6
7
8
9
10
11
12
/ /
/ / SplashScreenController.m
/ /
void ) animateBackgroundDown : ( id ) target selector : ( SEL ) selector { - (Void) animateBackgroundDown: (id) alvo selector: (SEL) seletor {
nil context : nil ] ; [UIView beginAnimations: contexto nil: nil];
0.75 ] ; [UIView setAnimationDuration: 0,75];
UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
target ] ; [SetAnimationDelegate UIView: target];
selector ] ; [UIView setAnimationDidStopSelector: selector];
CGRect ) { 0 , 480 , 320 , 480 } ; self.view.frame = (CGRect) {0, 480, 320, 480};
; [UIView commitAnimations];
}

). Agora temos um método que leva o "contexto" ( target ) eo método a ser chamado ( selector ). a qualsiasi altro “oggetto” / classe in grado di riceverlo. Agora, quando a animação termina, a mensagem AnimationDidStop será enviada para myAppDelegate qualquer "objeto" outro / classe que pode recebê-la.

Continuação ...

Objective-C: uma alternativa ao uso CGRectMake

CGRectMake() é uma função (na verdade uma linha # define) muito utilizada, especialmente quando você criar gráficos a partir de objetos de código ou interface do usuário. o UIImageView . CGRectMake() restituisce una struct (struttura di tipo) CGRect : Seu uso é, portanto, muitas vezes associada a inicialização de componentes UIKit , mas também a simples UIView ou UIImageView . CGRectMake() retorna um struct (tipo de estrutura) CGRect :

1
2
3
4
5
struct {CGRect
CGPoint origem;
CGSize tamanho;
};
typedef struct CGRect CGRect;

: Que por sua vez é composta de duas diferentes struct CGPoint e CGSize :

1
2
3
4
5
6
7
8
9
10
11
12
13
struct {CGPoint
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;

Tamanhos / *. * /

struct {CGSize
CGFloat largura;
CGFloat altura;
};
CGSize CGSize typedef struct;

. Que, por sua vez, outra vez, contêm tipos CGFloat ou tipo de float . Se analisarmos o código de CGRectMake () são:

1
2
3
4
5
6
7
8
CG_INLINE CGRect
CGRectMake (CGFloat x, y CGFloat, largura CGFloat, CGFloat altura)
{
CGRect rect;
y; rect.origin.x = x, y = rect.origin.y;
height; rect.size.width = altura, largura = rect.size.height;
retorno rect;
}

Segue-se, portanto, que este pedaço de código:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
12 , 409 , 100 , 40 ) ; gbutton.frame = CGRectMake (12, 409, 100, 40);
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Press" Forst: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Poderia muito bem ser escrito como:

1
2
3
4
[ UIButton buttonWithType : UIButtonTypeRoundedRect ] ; UIButton gbutton * = [UIButton buttonWithType: UIButtonTypeRoundedRect];
CGRect ) { 12 , 409 , 100 , 40 } ; gbutton.frame = (CGRect) {12, 409, 100, 40};
@ "Press" forState : UIControlStateNormal ] ; [Gbutton setTitle: @ "Press" Forst: UIControlStateNormal];
gbutton ] ; [MainWindow addSubview: gbutton];

Apenas para acelerar as coisas "o código está sendo executado ... :)

Continuação ...

Atalho Xcode

Xcode é um ambiente de desenvolvimento muito bom, agradável e cheio de detalhes que tornam a escrita de código eficiente e agradável. Entre elas está a facilidade de auto-completar ao digitar, especialmente quando escrever aplicativos para Apple iPhone, onde os quadros são muitas e lembre-se empresa de sintaxe e de nomenclatura de alguns.

Continuação ...

Xcode: dicas de depuração em Preferências

Usando o Xcode Preferências você pode definir o comportamento da atmosfera durante a fase de depuração de um aplicativo para iPhone. As configurações padrão, de fato, são muito desconfortáveis ​​quando você tenta e tente novamente de um aplicativo, por exemplo, após o lançamento de nossa aplicação, você deve manualmente abrir a janela de console para ver a saída de vários NSLog() . Xcode também permite que as sessões anteriores, a fim de forçar-nos a limpar a janela com a mão. Felizmente, você pode resolver o problema, agindo sobre as preferências:

xcode-preferences

Como mostrado acima, basta selecionar um item no menu começam a decidir qual janela de depuração para abrir automaticamente na inicialização do nosso válida se (I & Debugger set Console, mas você pode escolher os melhores ternos que você). À direita, então encontramos Auto Debug Console Clear, de modo que você sempre começam com um console limpo.

Continuação ...

iPhone: estender uma classe UIView

creato. Quero mostrar como você pode, facilmente e rapidamente estender uma classe UIView de uma forma que responde a um novo método de inicialização contém código adicional para personalizar o objeto UIView criado. Como alguns de vocês provavelmente sabem, Objective-C não suporta um único fabricante como nas línguas outro objeto orientado (como o Adobe ActionScript ou PHP 5). É possível, de fato, criar uma instância de uma classe manualmente invocando diferentes fabricantes (virtualmente infinito). . Normalmente são usados ​​para criar objetos UIView com o clássico initWithFrame . Mas imagine que você deseja criar uma nova classe de objetos visuais, a partir de um UIView , com algumas adições, como uma etiqueta de built-in. . Basicamente o que nós queremos é que instanciar o nosso objeto que cria, bem como o UIView , um objeto do tipo UILabel . Por exemplo, podemos querer chegar ao fim:

1
[ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel vl = * [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) label: @ "Olá"];

: Para isso basta criar uma nova classe do tipo UIView e chamar ViewLabel :

1
2
3
4
5
6
7
8
9
10
11
12
13
/ /
/ / ViewLabel.h
/ /

# Import <UIKit/UIKit.h>

UIView { @ Interface ViewLabel: UIView {
* UILabel internalLabel;
}

id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine; - (Id) initWithLabelDefine: (CGRect) rótulo de quadro: ( NSString *) labelDefine;

@ End
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
33
34
35
36
37
38
39
40
41
42
43
44
/ /
/ / ViewLabel.m
/ /

# Import "ViewLabel.h"

@ Implementação ViewLabel

id ) initWithFrame : ( CGRect ) frame { - (Id) initWithFrame: frame (CGRect) {

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: frame]) {
/ / Inicialização código
}
retorno auto;
}

/ /
/ / Inicializador Nosso novo
/ /
id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine { - (Id) initWithLabelDefine: (CGRect) rótulo de quadro: ( NSString *) {labelDefine

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: frame]) {
/ / Aqui você pode decidir o que fazer, eu para
/ / Eu tenho o mesmo quadro de segurança no passado
/ / Entrada mas eu redefinir a x e y
; frame.origin.x = 0;
; frame.origin.y = 0;
UILabel alloc ] initWithFrame : frame ] ; internalLabel = [[UILabel alloc] initWithFrame: frame];
internalLabel.text = labelDefine;
internalLabel ] ; [Self addSubview: internalLabel];
; [InternalLabel release];
}
retorno auto;
}

void ) drawRect : ( CGRect ) rect { - (Void) drawRect: (CGRect) {rect
/ Desenho / code
}

void ) dealloc { - (Void) {dealloc
; [Super dealloc];
}

@ End

Na época da criação da nossa nova classe, podemos usar:

1
[ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel vl = * [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) label: @ "Olá"];

Continuação ...

iPhone SecondApp: Adivinhe o número - Parte 2

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:

newproject

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:

deleteib

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.

Continuação ...

XCode: organizar seu código com a marca # pragma

XCode é muito poderoso e versátil e oferece o programador com muitas características úteis e simples de usar. Ao escrever código complexo, ou pelo menos articulada, torna-se importante para organizar o seu código para que você não perca tempo procurando funções espalhados em longas linhas de código. Depois de comentar, a primeira coisa e mais importante a fazer, o XCode ambiente fornece orientações (bom) para melhorar a usabilidade e legginilità dentro do desenvolvimento. Uma delas é a directiva #pragma mark que se torna muito útil na organização de grupos de código e métodos.

Na foto abaixo você pode ver a parte de código do meu projeto PragmaTest :

pragmamark-1

O menu superior dropdown permite listar todos os métodos da nossa classe. Agora, se nós inserimos o nosso método sobre a directiva #pragma mark que tem uma sintaxe:

1
# Pragma marca {label}

Obtemos:

pragmamark-2

A primeira #pragma mark com um hífen (-) insere uma linha separadora. O segundo é um texto (label) a gosto. Você pode adicionar a seguinte declaração em que você deseja, organizando o código como você vê o ajuste. Você pode inserir mais linhas pragmáticas, digite:

1
2
3
4
5
6
# Pragma marca -
# Pragma marca / **
# * Pragma marca Usando o pragma
# * Pragma marca em várias linhas de código
# Pragma marca * /
void ) mioMetodo { } - (Void) {} myMethod

Continuação ...

Truque muito curto: WordPress, destaque os resultados de uma pesquisa

Existem muitos plugins para WordPress que permitem melhorar as características eo desempenho do "Search". Quase todos os plugins disponíveis têm um atrativo e útil funcionalidade de pesquisa em termos destacar o resultado da pesquisa. Se você não planeja mais appensantire sua instalação do WordPress, mas não quer desistir de tudo a um recurso semelhante, veja aqui como implementar facilmente um "destaques" de cupins nos resultados da pesquisa.

Continuação ...

Truque muito curto: WordPress, excluídas as páginas de pesquisa e pós

O interior do motor do WordPress utilizado para a investigação (o padrão sem a adição de plug-in) realiza um clássico de baixo nível query_post() . A pesquisa é dapperttutto sem exclusão. Este recurso pode ser controlada, no entanto, permitindo, por exemplo, para pesquisar em todo exceto em categorias especiais, páginas ou posts.

Continuação ...

Apple iPhone: A primeira versão 1,2

thefirst12claim

appstore-60

Disponível na AppStore a atualização para a versão 1.2 do primeiraoperação . Aqui estão as notas de lançamento:

  • Totalmente revisto em todo os gráficos do jogo, que agora é muito mais agradável
  • Compatíveis com o Apple iPhone 3.0
  • Adicionado efeitos sonoros
  • Revisto e melhorado a navegabilidade do jogo e as instruções

Continuação ...



Parar SOPA