No estas mostrando que el updateContainerView debia ser llamado en el viewDidLoad, de no revisar el source hubiese seguido perdido.
Introducción
Lo que aprenderás sobre el desarrollo de interfaces con iOS
Instalacion de Xcode desde 0
Introducción a Xcode
Primer Proyecto
Navigation Area
Editor, Util Area y Tool Bar
Targets y Target Tabs
Formas de crear vistas
Organizacion de Carpetas
Storyboards vs Xibs vs Codigo
Splash Screen
Completando nuestro Splash Screen
UIView Components
TabBar Controller y Mejores Prácticas
Storyboard Reference
Explicación breve de algunos elementos gráficos
Crear nuestra primera interfaz gráfica
Diferentes componentes y formas de autolayout
Agregando el resto de nuestros componentes usando constraints
Agregando Estilo a UIView Components
Agregando un icono a nuestra app
Custom colors
Agregando iconos a nuestros botones
Key paths de redondeo y sombra
Custom fonts
Scroll view controller
Tipos de vistas y manejo
OnBoarding View
Container ViewController
Container ViewController con código
ContainerViews
Adaptación de vistas
Tablas
Diseño de celdas
Completando nuestras vistas
Código para las tablas
Tamaños dinamicos para las celdas
EmptyState usando código
Agregar estilos a nuestro navigation view
Agregando estilos a nuestro Tab bar
Custom Tab bar button
Budget view
Iniciando el header de animacion
Animación de barra superior en las tablas usando constraints
Stats
Conclusiones
Reto final
Conclusiones
Bonus: Lottie
Gestión de dependencias
Instalación dependencias con Cocoapods
Instalación dependencias con Carthage
Cocoapods vs Carthage
Crear nuestro lottie file
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Los Container View Controllers son una de las mejores formas de refactorizar vistas y crear funciones únicas en ellas.
El reto de esta clase consiste en que arregles los problemas que están teniendo los constraints.
Aportes 17
Preguntas 3
No estas mostrando que el updateContainerView debia ser llamado en el viewDidLoad, de no revisar el source hubiese seguido perdido.
-.- le falto esa linea de código, por eso no funcionaba.
solo escribe código y uno tiene que imaginar el por que lo hace de todos los cursos de este es el peor, no dudo de las capacidades del tipo, pero en cuestion enseñanza le fata mucho.
Les dejo estos atajos del teclado espero les funcionen.
Interfaz de usuario: que son todos aquellos atajos que nos permiten navegar por las diferentes interfaces de usuario de Xcode, pudiendo mostrar u ocultar zonas del entorno de desarrollo según necesitemos.
Ciclo de vida de la app: que nos permiten compilar, ejecutar en el simulador o dispositivo, detener la ejecución y otras opciones.
Vista de código: son atajos para utilizar dentro del editor de código.
Generales : son aquellos de carácter general y que probablemente vamos a utilizar en múltiples ocasiones.
Interfaz de usuario
Vamos a comenzar con la barra izquierda de la pantalla o Navigation Area. Utilizando los siguientes atajos podemos ocultar, o mostrar todas y cada una de las diferentes pestañas:
⌘ + 0: mostrar / ocultar la barra lateral
⌘ + N: selecciona la pestaña número N
Por otro lado, podemos hacer lo mismo pero con la barra derecha de la pantalla o Utilities Area:
⌘ + ⌥ + 0: mostrar / ocultar la barra lateral
⌘ + ⌥ + N: selecciona la pestaña número N
Finalmente, si lo que queremos es mostrar / ocultar la barra de la consola, lo haremos con el atajo ⌘ + ⇧ + Y.
Otro atajo muy interesante es el que nos permite abrir el Assistant Editor cuando tenemos seleccionado un Storyboard por ejemplo. Para abrir la vista únicamente haremos ⌘ + ⌥ + ↩. Si queremos volver a cerrar el asistente, lo haremos con ⌘ + ↩.
Ciclo de vida de la app
Si en cualquier momento queremos compilar nuestra app, lo haremos utilizando el atajo ⌘ + B.
Cuando lo que necesitemos sea ejecutar la app en el simulador / dispositivo, podremos utilizar el atajo ⌘ + R. Esta acción compila y despliega la app en el dispositivo o simulador seleccionado.
Para detener la ejecución de la app, podemos hacerlo mediante ⌘ + . si el foco esta en Xcode, o con ⌘ + Qsi el foco lo tiene el simulador (que básicamente cierra la app de simulador y detiene por tanto la ejecución).
Vista de código
Si queremos comentar un bloque de código seleccionado, lo podemos hacer pulsando ⌘ + ⇧ + 7.
Si estamos encima del nombre de un método o clase, podemos ir directamente a su definición pulsando el atajo ⌃ + ⌘ + J. Si luego queremos volver a donde estábamos, podemos hacerlo mediante ⌃ + ⌘ + ←.
Cuando vuestro código haya perdido su correcta indentación, tenéis un atajo que os permite indentarlo correctamente, seleccionando dicho bloque de código y pulsando el atajo ⌃ + i.
Generales
Quizás uno de los atajos mas productivos de todos es el Quick Open, que nos permite abrir cualquier archivo de nuestro proyecto mediante un muy sencillo buscador. Podéis abrir el Quick Open mediante el atajo ⌘ + ⇧ + O.
Este Quick Open no solo permite abrir archivos, sino que también podemos poner el nombre de un método o propiedad y nos llevará a dicho lugar en el código.
Si queremos abrir las Preferencias de Xcode, lo podemos hacer pulsando ⌘ + , siendo este atajo, aplicable a todas las aplicaciones de MacOS.
Conclusión
Los atajos de teclado son algo muy importante cuando te tomas en serio la productividad, y es que si sumamos todos los micro-momentos que dedicamos cambiando entre teclado y ratón, os aseguro que os dará una cuantiosa suma a lo largo del día.
Os recomiendo que le deis una oportunidad a estos atajos que os hemos traído, y que investiguéis otros muchos, que incluso podéis configurar, para ir descubriendo más y más opciones interesantes.
Se demuestra el manejo de la materia. Pero en general el curso falla por su enfoque pedagógico.
Hay que limitarse a copiar los pasos e imaginarse los porqués.
Espero que en las próximas clases se entienda mejor, me quedaron muchas dudas con estas últimas 2 clases, ya me toca aprender en otro lado.
le faltan varias cosas al curso, creo esta cortando detalles en la edición de video y es necesario otro curso actualizado pero con otro profesor, el ya no
'index(of:) is deprecated now. We should use `firstIndex(of:)` instead
Uff Lo que costo
Me quedaba en blanco la imagen, title y description, aunque estaban bien linkeados, solo se veía el botón, así que cerré Xcode, descargue los 4 archivos y abrí nuevamente y listo
En mi caso fué necesario modificar un poco la extensión del DataSource:
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let index = contentViewController.firstIndex(of: viewController)
if index == 0 {
return nil
}
return contentViewController[index ?? 0 + 1]
}
De lo contrario la aplicación se cerraba, por el índice fuera de rango…
Hola chicos. Cuando corro la app me sale el siguiente error:
2018-12-01 14:27:41.327565-0500 PlatziFinanzas[2356:639386] Failed to set (borderUIColor) user defined inspected property on (UIButton): [<UIButton 0x7ff44fc0ebf0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key borderUIColor.
2018-12-01 14:27:41.338425-0500 PlatziFinanzas[2356:639386] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<PlatziFinanzas.OnBoardingContainerViewController 0x7ff44ff1b1c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key pageController.'
*** First throw call stack:
(
0 CoreFoundation 0x00000001139c81bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x000000010f866735 objc_exception_throw + 48
2 CoreFoundation 0x00000001139c7d29 -[NSException raise] + 9
3 Foundation 0x000000010f291de4 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 292
4 UIKitCore 0x000000011db4a292 -[UIViewController setValue:forKey:] + 87
5 UIKitCore 0x000000011dde1573 -[UIRuntimeOutletConnection connect] + 109
6 CoreFoundation 0x00000001139b3cfd -[NSArray makeObjectsPerformSelector:] + 317
7 UIKitCore 0x000000011ddde2b9 -[UINib instantiateWithOwner:options:] + 1814
8 UIKitCore 0x000000011db51452 -[UIViewController _loadViewFromNibNamed:bundle:] + 383
9 UIKitCore 0x000000011db51ddc -[UIViewController loadView] + 177
10 UIKitCore 0x000000011db520ee -[UIViewController loadViewIfRequired] + 175
11 UIKitCore 0x000000011db52940 -[UIViewController view] + 27
12 UIKitCore 0x000000011e1a9c53 -[UIWindow addRootViewControllerViewIfPossible] + 122
13 UIKitCore 0x000000011e1aa36e -[UIWindow _setHidden:forced:] + 294
14 UIKitCore 0x000000011e1bd5c0 -[UIWindow makeKeyAndVisible] + 42
15 UIKitCore 0x000000011e16a833 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4595
16 UIKitCore 0x000000011e16fc2f -[UIApplication _runWithMainScene:transitionContext:completion:] + 1623
17 UIKitCore 0x000000011d98e4e9 __111-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:]_block_invoke + 866
18 UIKitCore 0x000000011d99729c +[_UICanvas _enqueuePostSettingUpdateTransactionBlock:] + 153
19 UIKitCore 0x000000011d98e126 -[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 233
20 UIKitCore 0x000000011d98eae0 -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 1085
21 UIKitCore 0x000000011d98ccb5 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 795
22 UIKitCore 0x000000011d98c95f -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 435
23 UIKitCore 0x000000011d991a90 __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 584
24 UIKitCore 0x000000011d99280e _performActionsWithDelayForTransitionContext + 100
25 UIKitCore 0x000000011d9917ef -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 221
26 UIKitCore 0x000000011d99693a -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 392
27 UIKitCore 0x000000011e16e44e -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 515
28 UIKitCore 0x000000011dd12d09 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 357
29 FrontBoardServices 0x00000001178b72da -[FBSSceneImpl _didCreateWithTransitionContext:completion:] + 448
30 FrontBoardServices 0x00000001178c2443 __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 271
31 FrontBoardServices 0x00000001178c1b3a __40-[FBSWorkspace _performDelegateCallOut:]_block_invoke + 53
32 libdispatch.dylib 0x000000011748d602 _dispatch_client_callout + 8
33 libdispatch.dylib 0x0000000117490b78 _dispatch_block_invoke_direct + 301
34 FrontBoardServices 0x00000001178f6ba8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 30
35 FrontBoardServices 0x00000001178f6860 -[FBSSerialQueue _performNext] + 457
36 FrontBoardServices 0x00000001178f6e40 -[FBSSerialQueue _performNextFromRunLoopSource] + 45
37 CoreFoundation 0x000000011392d721 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
38 CoreFoundation 0x000000011392cf93 __CFRunLoopDoSources0 + 243
39 CoreFoundation 0x000000011392763f __CFRunLoopRun + 1263
40 CoreFoundation 0x0000000113926e11 CFRunLoopRunSpecific + 625
41 GraphicsServices 0x00000001104db1dd GSEventRunModal + 62
42 UIKitCore 0x000000011e17181d UIApplicationMain + 140
43 PlatziFinanzas 0x000000010ea96677 main + 71
44 libdyld.dylib 0x0000000117503575 start + 1
45 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException```
¿Por qué ocurre si el código de borde funcionaba?
Ah... y cuando la corrí la primera vez me crea una nueva app... Ahora tengo dos. ¿Por qué sucede esto?
Hola Andrés, me perdí en este punto ya que al compilar la aplicación, veo que ya están las imágenes, pero no recuerdo en qué punto se agregan. Creo que he seguido juiciosamente los videos pero ya en este, están las imágenes, en la App que tengo todo parece estar bien pero no recuerdo en qué video se agregaron las imágenes… depronto falta algún video intermedio?
Redundant conformance of ‘OnBoardingViewController’ to protocol ‘UIPageViewControllerDelegate’
a mi me salto este error
De verdad que para personas sin experiencia en programacion o inclusive al menos conocimientos basicos de iOS, tomar esta carrera ha de ser super complejo
Hola si quisiera que esta pantalla solo se mostrase una unica vez como lo haría ??
Para los que estan viendo esta parte del curso y ya no les aparace la funcion pageController(transition completed) aqui esta:
extension OnBoardingViewController: UIPageViewControllerDelegate {
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
guard let index = contentViewController.index(of: viewControllers!.first!) else {
return
}
PageControl?.currentPage = index
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.