7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. iOS SDK

Passando dados entre Controllers no Swift

Scroll to top
Read Time: 7 mins

Portuguese (Português) translation by David Batista (you can also view the original English article)

Sobre o Swift

O Swift é uma impressionante linguagem de programação que a Apple apresentou durante o WWDC de 2014 e agora quase todos os desenvolvedores Apple estão usando ela para programar aplicativos iOS e OS X. Ela é muito flexível, mais fácil de usar que seu predecessor Objective C e ela irá poupar seu precioso tempo quando estiver codificando no Xcode.

Esta é a poderosa e intuitiva linguagem de programação para iOS, OS X, tvOS e watchOS. Codificar com Swift é interativo e divertido, a sintaxe é concisa e expressiva e o Swift inclui ferramentas modernas que os desenvolvedores amam. Se você ainda não esta usando o Swift, verifique alguns dos nossos outros grandes tutoriais sobre a linguagem Swift:

Sobre este tutorial

Na maioria das vezes, quando você constrói um app iOS com mais de uma tela, você precisa passar dados entre suas View Controllers para que elas compartilhem conteúdo sem ter perda ao longo do caminho. Neste tutorial, você aprenderá como fazer isso. Usaremos uma String, um Integer e também um UIImage, então continue lendo - você ficará surpreso em como é fácil fazer isso com o Swift.

Configurando o projeto no Xcode

Primeiro de tudo, crie um novo projeto no Xcode. Escolha Single View Application e chame o projeto como quiser. Você encontrará um arquivo ViewController.swift na lista de arquivos no painel a esquerda e um controlador de interface no Storyboard.

Comece arrastando uma nova View Controller da biblioteca de objetos para o Storyboard.

Storyboard showing new View ControllerStoryboard showing new View ControllerStoryboard showing new View Controller

Incorpore seu primeiro controlador em uma NavigationController, assim quando você chamar o próximo controlador, a barra superior irá exibir um botão Back por padrão. Então selecione o primeiro controlador no Storyboard e clique em Editor > Embed in... > Navigation Controller.

Choosing Navigation Controller from the Editor menuChoosing Navigation Controller from the Editor menuChoosing Navigation Controller from the Editor menu

Agora adicione uma UILabel e um UIButton no controlador. Você pode acha-los na biblioteca de objetos e arrasta-los para seu primeiro controlador. Dê um duplo clique na UILabel e digite o texto que você deseja passar para o segundo controlador. Eu defini apenas "Text to pass".

No segundo Controlador, arraste uma nova UILabel em qualquer lugar que você quiser e deixe o texto como esta.

New UILabel in second ControllerNew UILabel in second ControllerNew UILabel in second Controller

Agora temos que criar um novo arquivo .swift e anexa-lo ao nosso segundo controlador. Sendo assim, clique com o botão direito no painel da lista de arquivos a esquerda, clique em New File... selecione Cocoa Touch Class na categoria iOS Source, clique em Next e chame a nova view controller de SecondVC. (Espaços não são permitidos no nome e ele deve começar com uma letra maiúscula).

Selecting New File from the menuSelecting New File from the menuSelecting New File from the menu
Choosing the options for the new fileChoosing the options for the new fileChoosing the options for the new file

Agora você tem que conectar o segundo Controlador no Storyboard ao seu novo arquivo SecondVC.swift. Selecione o circulo amarelo no topo do controlador, clique no icone do painel Identify Inspector na direita da janela do Xcode e nos campos Class e StoryboardID digite o nome do seu novo arquivo .swift.

linking the second Controller in Storyboard with your new SecondVCswift filelinking the second Controller in Storyboard with your new SecondVCswift filelinking the second Controller in Storyboard with your new SecondVCswift file

Conectando Views aos arquivos .swift

Divida a tela do Xcode em duas partes clicando no botão Assistant editor no canto superior direito. Agora você terá o Storyboard a esquerda e seu arquivo .swift na metade da direita.

XCode window split into two partsXCode window split into two partsXCode window split into two parts

Conecte a UILabel com um IBOutlet e o UIButton com um IBAction no seu arquivo .swift segurando o botão direito do mouse (ou segure o Control e o botão do mouse) na view e arraste a linha azul até a declaração da class.

Quando você soltar o mouse, você poderá dar um nome para a outlet da label e para a ação do botão na pequena janela que aparecerá. Para o botão, certifique-se de clicar no combo box que diz Outlet e trocar para Action, pois precisamos que ele seja uma função e não um outlet.

Screenshot showing where to drag the blue lineScreenshot showing where to drag the blue lineScreenshot showing where to drag the blue line
 give a name to the labels outlet and to the buttons action  give a name to the labels outlet and to the buttons action  give a name to the labels outlet and to the buttons action
Choose Outlet not ActionChoose Outlet not ActionChoose Outlet not Action

Uma vez feita a conexão com todas as view, mantenha seu Xcode com a tela dividida em duas seções e selecione o primeiro controlador no Storyboard. Agora o lado direito irá exibir o arquivo ViewController.swift e você estará pronto para escrever os códigos nela.

Vamos ao código!

Coloque o seguinte código no método goButton().

Na primeira linha instânciamos o controlador SecondVC do storyboard.

A segunda linha é o foco deste tutorial, ja que nela atribuímos o texto da myLabel para a UILabel que colocamos no controlador SecondVC. Fazemos isso através da criação de uma String que iremos declarar mais tarde.

Então finalmente, chamamos a view do próximo controller.

Passando uma String

Agora selecione o outro controlador no Storyboard e adicione esta variável abaixo da declaração da classe do SecondVC.

Faça o app atribuir o valor dessa variável à secondLabel com a seguinte linha de código no método viewDidLoad().

Pronto! Rode o app no Simulador iOS ou em um aparelho real, toque em GO! e você deve obter algo parecido com isso:

App showing Text to passApp showing Text to passApp showing Text to pass

Como você pode ver, a String Text to pass foi passada com sucesso para o nosso controlador SecondVC.

Passando um inteiro

Agora vamos tentar adicionar um inteiro (Int no Swift) e compartilhar entre os dois controladores.

Adicione a seguinte variável na ViewController.swift, bem abaixo da declaração do outlet myLabel.

Inicialize seu valor na viewDidLoad():

Em seguida, edite a função goButton() adicionando uma instância que também passaremos o meu valor myInt para a próximo controlador, da seguinte forma:

Agora vá para a SecondVC.swift e primeiro adicione uma variável do tipo Int que receberá o número que enviaremos do primeiro controlador.  Coloque esta linha de código logo abaixo da variável stringPassed.

Edite a linha de código da secondLabel conforme abaixo:

Isso é tudo. Rode o app novamente e toque no botão GO! e você deve obter algo parecido com isso:

App screen showing Text to pass my Int 5App screen showing Text to pass my Int 5App screen showing Text to pass my Int 5

Então, agora você vê como é fácil passar variáveis de um controlador para outro. A última coisa que eu gostaria de te mostrar é como passar uma imagem.

Passando uma Image

Em seguida vamos adicionar uma imagem na pasta Assets do Xcode, um UIImageView em ambos os controllers e suas variáveis do tipo UIImage.

Entre na pasta azul Assets.xcassets e crie uma nova Image Set.

New Image SetNew Image SetNew Image Set

Arraste as imagens 3x, 2x e 1x para suas respectivas caixas. Sinta-se livre para usar qualquer imagem. Eu irei usar um logo da Apple apenas como exemplo.

3x 2x and 1x images in their relative boxes3x 2x and 1x images in their relative boxes3x 2x and 1x images in their relative boxes

Volte para o primeiro controlador no Storyboard e arraste uma UIImageView para qualquer lugar nele. Anexe sua imagem a ele usando o painel Attributes inspector e defina seu Mode para Aspect Fit.

Agora arraste um novo UIImageVIew para o segundo controller e atribua seu Mode para Aspect Fit. Não anexe nenhuma image nele, ja que vamos passar a imagem do primeiro controlador!

setting the Mode to Aspect Fitsetting the Mode to Aspect Fitsetting the Mode to Aspect Fit

Clique com o botão direito do mouse (ou seguro o Control e clique com o botão do mouse) e arraste uma linha azul para o primeiro controlador do arquivo .swift para declarar a IBOutlet da sua UIImageView. Faça a mesma coisa no segundo controlador.

declare your UIImageView as an IBOutletdeclare your UIImageView as an IBOutletdeclare your UIImageView as an IBOutlet
Same thing on the second controllerSame thing on the second controllerSame thing on the second controller

Agora você tem que adicionar uma variável UIImage no arquivo SecondVC.swift. Coloque ela abaixo da variável intPassed.

Na viewDidLoad(), pegue a imagem passada pelo primeiro controlador e exiba ela na imagePassed.

Por ultimo, edite o método goButton() adicionando uma linha de código que irá passar a imagem do primeiro controlador para a UIImageVIew do segundo. O método goButton() completo ficará conforme a seguir.

Rode o app, toque novamente no botão GO! e você deve ver algo parecido com isso:

App screen showing Text to pass my Int 5 and Apple logoApp screen showing Text to pass my Int 5 and Apple logoApp screen showing Text to pass my Int 5 and Apple logo

Obrigado por me acompanhar! Eu espero que você esteja espantado com o quão fácil é trocar variáveis e imagens entre dois controladores. Por favor verifique nossos outros tutoriais sobre Xcode e Swift!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.