[Powered by Google Translate] [Семінар] [IOS: Написання додатків, таких як Boss]
[Tommy MacWilliam] [Гарвардський університет]
[Це CS50.] [CS50.TV]
>> Гаразд, все, ласкаво просимо в IOS: Написання додатків, таких як Boss.
Цей семінар буде зосередитися на написанні додатків для iPhone
і в свою чергу написання додатків для iPad, і тому ми в основному будемо ходити через
кілька різних прикладів того, як зробити додаток, простий грі, як Tic Tac Toe,
або якщо ви більше зацікавлені в створенні додатків, як свого роду читання новин
або щось, що взаємодіє з інтернетом я буду говорити про те, що, як добре.
Ось наш короткий порядку денного.
>> IOS додатків написані на мові, званому Objective-C,
і таким чином, це трохи схожий на C, але насправді не на всіх,
таким чином, ми будемо говорити трохи про саму мову
, А потім, як побудувати iPhone додатки за допомогою цього додатка програма під назвою XCode,
яка, якщо ви ще не завантажили його ще, не соромтеся, щоб почати завантаження зараз.
Це кілька гігабайт.
Вона повинна бути вільна від App Store, так що вам необхідно мати Mac
ідеально працює під управлінням останньої версії OS X.
Якщо ви не, не проблема.
У нас є комп'ютери Mac в науковому центрі у вашому розпорядженні
з XCode встановлений, і тому не соромтеся використовувати їх для розвитку.
Якщо ви хочете, щоб додаток, але не мають Mac, не хвилюйтеся.
Там є багато кампуса ресурсів для цього.
І тоді ми збираємося охопити 2 великих приклади різних додатків, які ви можете зробити.
Objective-C є технічно те, що називається супер набір C.
Це означає, що будь-який код C справедливо і Objective-C код.
Це означає, що ми як би ізолюючу плівку на деякі додаткові функції C.
Деякі з цих функцій включають в себе не того, щоб коли-небудь написати Танос раз, слава Богу,
не турбуючись про тих дурних покажчики і звільняючи їх і все таке
Ви ненавидів C, і це частково пішли в Objective-C.
>> Тепер, Objective-C також має набагато більше стандартної бібліотеки,
так що є набагато більше функціональних можливостей ви отримуєте безкоштовно всередині Objective-C.
Пам'ятаєте, коли ми писали PHP ми помітили, що ми перейшли від
це найменший мову гігантські бібліотеки всі ці божевільні речі, які ви можете зробити.
Те ж саме відбувається в IOS.
Там в об'єкти для таких речей як календар буддист, і дійсно нічого
можливо, ви можете думати, ймовірно, вже існує в реалізації Objective-C.
Об'єктивна сторона Objective-C посилається щось
називається об'єктно-орієнтоване програмування.
Це свого роду нова концепція, але ми насправді головним чином дізнався,
Багато хто з цих концепцій вже.
Ідея об'єктно-орієнтованого програмування є те, що ви будете структурувати
Багато коду навколо цих речей, які називаються класами,
і ці класи дійсно прославив структур.
Усередині структури, ми в основному тут сказати, це річ,
і ця річ може мати членів.
Наприклад, вузол пов'язаного списку може є інші речі,
як значення, покажчик на наступний вузол в списку,
і разом, що покажчик, і це значення полягає цей екземпляр структури.
Класи дуже схожі, за винятком
Класи також можуть мати функції всередині них.
Коли ми оголосили структуру, ми можемо тільки сказати, Int N або вузла * наступний.
>> Тепер з Objective-C ми дійсно можемо покласти функції
Усередині цих речей.
Інша справа, що класи можуть зробити це вони можуть успадковувати дані з інших класів.
Наприклад, ми будемо дивитися на купу вбудованих в Objective-C класи.
Один з них може бути клас, який представляє вид на екрані,
і це, кажучи, що я хочу, щоб реалізувати мою власну точку зору
ми в основному говорять, що хтось більш на Apple, імовірно, дійсно хороші люди,
написав цей клас для мене, і він обробляє такі речі, як відображення кнопок
або надання екрані, і ми б дуже боляче
реалізувати все, що функціональність самих себе, і так просто
спадкування даних, ми можемо сказати, що все, що ви зробили в цьому класі
Я також хочу всередині мого класу, а потім я збираюся зробити деякі інші речі,
а саме здійснення додаток.
Це те, що це слово означає спадок. Ми побачимо більш конкретний приклад.
>> І, нарешті, ключ з об'єктно-орієнтованого програмування є те, що
це призводить до інкапсуляції даних.
У деяких з наших проблемою задає ми могли б мати ці великі, глобальні змінні
і глобальні скрізь, і це, як ми б відслідковувати стан.
З класами ми можемо почати інкапсуляції інформації всередині об'єкта.
Якщо у нас є один екран на наш додаток, ми дійсно не потрібно мати будь-яких даних з
інший екран в наш додаток всередині, що,
і так шляхом інкапсуляції речі в класах це насправді призводить
щоб краще норм проектування, а це можливо з деякими додатковими функціями
з Objective-C.
Попередженням, синтаксис Objective-C є бананів.
Це все одно ми нічого не бачили раніше,
так що це трохи кривий навчання звикають до
Якого біса це означає?
Але як тільки Ви закінчуєте, що початкова крива навчання, це дуже, дуже гладка
, Щоб почати писати програми.
>> Щоб оголосити клас, якщо не сказати ось мій клас, він існує,
і, можливо, тут деякі речі, які я збираюся визначимо пізніше,
Я збираюся сказати @ інтерфейс.
Я збираюся сказати @ інтерфейс. Я збираюся дати моєму класу ім'я.
А потім десь в іншому місці я збираюся сказати @ кінця,
і всі між ними @ інтерфейсом і @ кінця
буде мій клас.
Це буде те, що всередині нашого. Файлів годину.
Так само, як у З нашим. Ч файли в основному сказали, ось деякі речі, які будуть існувати.
Я не обов'язково кажу вам, що вони роблять, тим не менш,
але компілятор повинен знати, що вони існують.
Пізніше всередині нашого. М. файли, тому що м для Objective-C
то, де ми насправді збираємося визначити, що ці класи.
Багато чого, як наша. Файлів с, за умови, реалізація функцій.
Усередині нашої. М. файл, який ми збираємося сказати ось те, що всі функції
всередині мого класу, що вони все роблять.
І, нарешті, внутрішньої структури, можна сказати, в тих фігурні дужки
Int N або вузла * наступний,
і в Objective-C ми збираємося використовувати ключове слово @ власності,
і це те, що відбувається, щоб визначити властивості,
або не-функцій, які є частиною мого класу.
>> Виклик функції в Objective-C також банани.
Коли ми оголосили функцій в C ми сказали щось на кшталт Int Foo
і відкритої хлопець, а потім дав йому список аргументів.
Це те, що оголосивши методи або функції виглядає в Objective-C.
Якщо я хочу оголосити функцію або метод
де я кажу, що метод дійсно просто функція, яка є членом класу,
так начебто взаємозамінні, але не дуже,
так що усередині мого методу, я хочу створити новий метод.
Він збирається повернутися нічого, так що це буде типу недійсними.
Це повернення типу моя функція.
Тепер у нас є дужки тут, тому що, я не знаю.
Далі буде ім'я моєї функції,
і, нарешті, у нас є крапка з комою, як ми мали в C.
Що нового тут цей хлопець тут.
Це дефіс дійсно необхідно, і що це говорить про те, що
Тут цей метод повинен бути викликаний на екземпляр класу.
>> Після того як ми заявили нашим структурам ми, ймовірно, сказав щось на кшталт:
п структури вузла, і що насправді створені
або примірник одного з цих структур так, щоб я міг фактично почати роботу
з тим, що всередині нього, так що це Прочерк означає, що ми повинні
екземпляр класу, як ми екземплярів, що структура
перш, ніж ми можемо назвати цей метод.
Якщо я хочу, щоб почати додавати аргументи мої методи
це стає ще більше бананів.
Ось моє ім'я методу.
Тоді я буду мати двокрапка, а після цього товстої кишки тут говориться, приходить кілька аргументів.
Цей метод приймає один аргумент.
Типу його аргументу Int, і ім'я цього аргументу
або змінна, яку я збираюся почати використовувати всередині метод називається я.
Знову ж таки, це метод. Вона приймає один аргумент.
>> Якщо ви хочете, щоб почати додавати більше аргументів він отримує більше бананів
У тому, що ми цю товстої кишки, що говорить тут приходить мій список аргументів.
Це перший аргумент є цілим числом.
Тепер це другий аргумент цікаво.
Змінних, що я збираюся використовувати всередині мого функції
називається F, так що усередині мого функції я можу сказати,
F + = 1 або щось.
Ця річ тут в основному ключ для цього аргументу або параметра.
Так само, як у нас було пар ключ-значення, а щось на зразок JSON або асоціативні масиви
Objective-C прийняли рішення сказати, гаразд, просто так, що це дійсно ясно
При виклику методу те, що всі ці параметри
Насправді я збирався назвати їх усіх.
Коли ви викликаєте метод, ви фактично говорите andFloat,
і тоді ви будете проходити його дюйма
>> Цікаво, що ця людина не назвав, але всі інші параметри,
так що якщо у нас був третій аргумент, який я міг сказати andFloat
і ще плавати і так далі.
Коли я називаю ці методи це, звичайно, банани,
так що якщо у мене є об'єкт, і я визначив метод Foo,
і я хочу його називати, а не говорити Foo відкрити / закрити дужки
Я збираюся відкрити дужки.
Ось ім'я мого методу.
Я збираюся закрити дужку, і це є предметом Я дзвоню його.
Пам'ятайте, що всі ці методи існують всередині класів
тому що класи можуть мати методи, визначені всередині них.
>> Тут я довільно створений об'єкт деякого класу,
і це синтаксис для цього.
Є 2 кроків для створення об'єкта.
В першу чергу сказати, що я хочу виділити простір.
Це еквівалентно Танос. Ми не повинні говорити Танос більше.
Ми кинули м, зробили його ідентифікатор, і замінив. З с. Метрів.
Після того як ми Alloc те, що ми тоді повинні ініціалізувати його.
В основному, коли ви створюєте об'єкти, які ви, можливо, захочете мати деяку логіку
, Який виконується, коли вони створені, так що ви можете передати деякі значення за замовчуванням
або щось подібне до цього, і тому цей метод ініціалізації є те, що насправді створює об'єкт.
Ми спочатку виділити місце, так само, як ми робили це в C,
а потім ми його ініціалізації, яка може або не може зробити дуже багато.
Потім ми повертаємо цю річ в об'єкт, о.
Там є зірка тут, тому що це технічно покажчик,
Але не хвилюйтеся, покажчиків не те, що велика угода в Objective-C більше.
>> Тепер ми екземпляр цього класу називають NSObject,
і це тільки випадковий класу, Яблуко.
Ми примірник цього, і тепер у мене є екземпляр цього класу
У цьому об'єкт О, так це значить, що, якщо я визначив
ці методи я міг би назвати їх, як це.
Точно так само, якщо б я хотів викликати метод з одним аргументом,
таким чином, це бар метод, який приймає один аргумент,
і ось Баз: qux метод, так що це займає від 2 аргументів.
Це виклик однієї функції на цьому об'єкті °.
Сенс?
Синтаксис повинно мати сенс, але ви начебто звикнути до нього.
>> Добре, давайте поговоримо про кілька речей, які вбудовані в Objective-C
, Які не обов'язково вбудовані в C.
У C ми якось мав справу з рядками, як ці дурні масиви символів,
і це стало дійсно дратує.
Objective-C має ті все побудовано у нас, і вона побудована в
за допомогою цього класу називають NSString.
Коли я хочу створити NSString у нас є більш таємний синтаксис.
Замість того, щоб говорити "CS50», ми говоримо @ "CS50"
і це тільки синтаксис для оголошення рядки в Objective-C.
Це дуже легко забути, так не роблять.
Тепер, коли у мене є, це рядок, але помітив
це дійсно тільки об'єкт.
Я сказав NSString, який означає, що я екземпляр класу
називається NSString, який написав хтось інший для мене,
і вони були дуже хороші про це, і тому зараз
Я можу почати називати його методи.
Якщо я називаю методом Довжина цього об'єкта з
він збирається повернутися до мене довжину рядка.
Це так само, як в StrLen C.
Це буде означати, 4.
>> Точно так само, іншого способу я б хотів, щоб піклуватися про це characterAtIndex.
Це метод, який говорить на цю рядок з
Я хочу, щоб ви нульовому характер,
і так це було б повернутися до мене з характером,
і є ціла купа більше з цих методів, які ви можете Google дуже легко.
Документації Apple, є великим, і ми поглянемо на це трохи пізніше.
Ті рядки.
Ми також масиви змінної розмір вбудованого
Пам'ятаєте, як в C, коли ми оголосили масив
Ми були у вас є 5 елементів, кінець історії.
Коли ми дісталися до JavaScript і PHP ми могли б почати
робити речі, як додавання елементів або переміщенні елементів.
Ми можемо зробити те ж саме в Objective-C.
Замість того, щоб створити масив у звичайному режимі C
ми знову інший клас NSMutableArray.
Там також NSArray,
і це буде в основному інкапсуляції деяких масивів.
Це говорить перше, що я хочу зробити, це я хочу виділити
місце для нового масиву, і після того як я передати його
Я тоді потрібно ініціалізувати його.
Знову ж таки, просто називаючи ці 2 способи.
Тепер це означає, що всередині цього об'єкту
Я порожній масив сидить.
Якщо я хочу щось додати до цього масиву, я можу назвати AddObject метод.
Я хочу додати об'єкт в масив, і я хочу, щоб додати рядок CS50.
Якби я хотів, навпаки, видалити, що я можу сказати, що я хочу
видалити об'єкт на першому місці на масив або об'єкт.
>> Сенс?
Добре, ви начебто звикнути до цієї площі річ кронштейн.
До речі, всередині багато бібліотек Apple, ви побачите, що це NS.
NS насправді позначає наступний крок, який був одним із Стіва Джобса компаній-перше,
а от де він справді почав писати багато коду
як свого роду основу для Mac OS X і всі інші речі,
і тому ця NS є своєрідною це хороше спадщина кричати на одній з ранніх компанії
тому, коли Apple, вперше початківців.
Це у всьому світі.
Давайте поглянемо на більш цілісний Objective-C прикладу.
Ось я всередині XCode.
Щоб потрапити сюди, я спочатку скачав XCode з App Store,
відкрив його, а потім я пішов сюди, щоб файл,
тут нові, а потім проект.
Після я роблю, що я всі ці варіанти того, що я хочу створити,
і тому ми поглянемо на ці параметри пізніше,
але тільки на цьому прикладі, тому що ми насправді не матиме додаток тим не менш,
Я прийшов сюди, і я сказав: інструмент командного рядка,
і це додаток, який я міг би запустити в командному рядку
так само, як ми вже працює з C.
Ось як я створив цей проект, і тому зараз я тут,
так що давайте спочатку подивимося на цей файл, і це має виглядати досить знайомою.
У мене є ім'я Int. Там мій друг агдс, мій інший приятель ARGV.
І таким чином ми бачимо, що це є відправною точкою для мого першого Objective-C додатків.
Тут ми можемо ігнорувати це зараз.
Це, в основному деякі речі керування пам'яттю, що ви не дуже
ніколи не доведеться турбуватися.
>> Давайте подивимося на цю Перший блок тут.
Це перша лінія, якщо я скажу, студентська * Аліса = [[Студентські ідентифікатор] Init] Що це робиш?
Це перший студент тут, це, ймовірно, класу.
Це не клас, Apple, пише, але це клас, який я написав.
Перше, що я хочу зробити, це я хочу виділити місце для нових студентів,
і тоді я хочу, щоб підготувати його, так що це дає мені назад
цей новий об'єкт студент, і я зберігаю це в змінну з ім'ям Аліса.
Звідки це клас прийшов?
Ну, тут на лівій стороні всі ці різні файли всередині мого проекту.
Ми бачимо тут в мене є Student.h і Student.m.
. Ч файлу, пам'ятаю, де я заявляю, всі речі,
, Які будуть існувати в межах класу.
>> Давайте подивимося на це.
Гаразд, тут ми маємо цю @ інтерфейс, і це говорить про те, що тут відбувається
деклараціях все, що буде існувати в моєму класі.
Тоді у мене товстої кишки. Тоді у мене є ця річ NSObject.
Це двокрапка означає, що спадок трохи ми обговорювали трохи раніше.
Це говорить, що все NSObject може зробити
де NSObject це клас, написаний кимось іншим,
все це можна зробити NSObject Я хочу бути в змозі зробити це.
За сказавши: NSObject, що означає, що я в принципі
успадкувала всі функції іншого класу.
Це дійсно дав мені цілу купу різних методів і властивостей, які я можу використовувати.
Тут, внизу я створюю 2 властивості.
Це означає, що мій студент, якби це була структура, це будуть 2 речі
Усередині моєї структурі, так що кожен студент має ім'я
, Що є рядок, і студент також має клас,
яка Int.
>> Нарешті, тут я збираюся створити метод для моїх студентів.
Я подзвонив своєму методу, initWithName, і вона приймає один аргумент,
і цей аргумент є рядком, і я назвав його ім'я.
Тепер давайте подивимося на те, як ми насправді реалізований цього класу.
Ось, тепер я всередині мого. Файл м,
м для реалізації, я думаю.
У мене є реалізація, мій кінець, і ось де я насправді визначенні
initWithName, що робить.
У мене є initWithName, ім'я моє параметра, а потім це
де я насправді створення студентом,
і таким чином, це трохи загадково, але це начебто шаблонний
, Які ви хочете включити в вашу конструкторів.
Ця функція ініціалізації тут, initWithName, є одним з видів конструктора.
Ви в основному будівництво нового об'єкта студента
і, можливо, відправка деяких даних усередині нього.
Перше, що я хочу зробити, це я хочу звернути ініціалізації на це супер річ.
>> Пам'ятайте, що, коли я сказав тому тут, в. Файл ч
що всі NSObject має студент має.
Це означає, що коли я створюю те, що я студент Також потрібно зробити, це
Переконайтеся, що NSObject, що я наследующий все, що дані
Також ініціалізований правильно.
Що я повинен сказати, це супер насправді відбувається послатися на батьківський клас
що я спадкування, тому я хочу, щоб переконатися, що я ініціалізації
все, що я в залежності від перш ніж почати намагатися його використовувати.
Тоді, якщо це правильно инициализирован це, як кажуть, якщо Танос
не повернути нульовий, то я можу почати установку деяких властивостей.
>> У JavaScript і PHP ми це ключове слово називають це,
і це відноситься до поточного екземпляру класу.
У Objective-C ми називаємо це самостійно.
Коли я кажу self.name, що означає, що об'єкт
Я тільки що створив, коли я сказав студент Alloc Init,
що збирається дати мені назад об'єктів.
Це означає, що я хочу задати ім'я цього об'єкта
до того, що я тільки що пройшло дюйма
Як і в C, ми отримуємо доступ до членів з цієї точки,
так self.name говорить, що ім'я студента об'єкта
Тепер буде все, що ви тільки що пройшли дюйма
І ось, нарешті, я можу повернути це так, я насправді отримати щось натомість.
>> Питання?
Гаразд, так це само = супер INIT,
якщо ви не зовсім розумієте спадщини речі не хвилюйтеся.
Просто знайте, що якщо ви хочете зробити свій власний метод ініціалізації просто
зробити це, і ви будете добре йти.
Так. >> [Студент] Що, якщо саме значить?
Це означає, що, коли ми Танос те, що ми завжди перевіряється, якщо вона була рівна нулю,
і якщо вона була нульовою, то ми вийшли.
Це те ж саме, тому що, якщо це повертає нуль, то ми, ймовірно, буде сегменті вина
якщо ми почнемо намагатися маніпулювати ним.
Це наш студент класу.
Це означає, що ми можемо ініціалізувати наші студенти в одному з двох способів.
Якщо я скажу, студент ідентифікатор ініціалізації я не використовую цей спосіб, що я тільки що написав,
і замість цього я можу просто сказати, alice.name,
і тепер я збираюся встановити, що ім'я властивості.
>> Точно так само, якщо я хочу використовувати цей метод initWithName
Я можу просто сказати, ідентифікатор, а потім замість того, щоб говорити ініціалізації
Я буду називати це метод, який я тільки що створили, і я збираюся пройти в Боб.
На даний момент, цей об'єкт Боб має ім'я, що збігається з Бобом.
Гаразд, тут я використовую, що NSMutableArray, що ми дивилися на раніше.
Я виділенні space.Then я ініціалізації нового масиву.
Я збираюся додати 2 речі до нього.
Цей масив в даний час проводить студент об'єктів.
Зверніть увагу, що ніде не я повинен сказати, що це масив студентів.
Я сказав, що це масив, період.
Тоді я можу покласти все, що всередині нього, що я хочу.
Ось у мене є 2 об'єкти.
>> Нарешті, у мене є інший об'єкт тут, це TF.
А тут в TF.h принципі те ж саме.
Я успадкування від NSObject, і, до речі,
При створенні класів все це робиться для вас,
такий шаблонний інтерфейс.
Вона має властивість студентів.
У мене є кілька методів, що тут дійсно не багато,
і так це означає, що після створення цього об'єкта TF
Я можу назвати цей метод класу на це так.
Будь-які питання по Objective-C синтаксис, перш ніж ми починаємо рухатися у кілька
цікаві розробки додатків речі?
>> Отже, давайте насправді зробити iPhone додатки.
Основні класи, які ви будете використовувати у Вашому iPhone додаток називається вид контролерів,
і вид контролера в основному являє собою єдиний екран
Всередині вашого додатки, так що якщо я на музику додаток, наприклад,
один вид контролера може представляти подання, в якому я розглядаю всі пісні на моєму iPhone.
Ще один вид контролера може бути, коли я натискаю пісню і почати грати
або як я бурінні вниз, в художники.
Кожен з цих різних екранах може бути представлене як інший контролер зору,
і вид контролера насправді просто клас, який говорить, як цей екран працює.
Речі всередині контролера уявлення, ми будемо мати властивості,
так що такі речі, як кнопка буде власністю нашої точки зору контролера.
>> Ми також збираємося мати методи, і в основному це обробники подій.
Цей метод говорить, що коли ви натиснете на цю кнопку
Я хочу зробити щось, і, нарешті, знову ж таки,
Ми будемо використовувати це само ключове слово, щоб отримати доступ до поточних екземпляром.
Для побудови інтерфейсів в IOS насправді дуже, дуже легко.
У них це добре перетягування інтерфейс під назвою Interface Builder,
і 2 базові концепції, що провід вашого Objective-C у Interface Builder
є IBOutlet і IBAction.
IBOutlet просто говорить, що якщо ви розкажете властивість, що це кнопка,
і ви хочете підключити його до чогось у Вашому UI,
Ви збираєтеся сказати, що це вихід.
Аналогічно, якщо ви хочете, щоб представляти обробник події
Потім ви збираєтеся сказати, що це дія.
>> Щоб насправді дроту до цього графічного представлення
і ваш код, це дуже, дуже просте.
Якщо ви хочете прикріпити IBOutlet, все що вам потрібно зробити, це ви керуєте миші,
і ми побачимо приклад цього дуже швидко.
Ви керуєте клацніть там, де він говорить View Controller.
Ви збираєтеся перетягнути в інтерфейсі, або, навпаки,
якщо ви хочете підключити обробник події ви збираєтеся перетягнути з інтерфейсу
в іншому напрямку.
Давайте поглянемо на дуже простий приклад IOS.
>> Давайте створимо новий проект.
Я збираюся приїхати сюди, щоб додатки,
і я збираюся натиснути Одна заявка View.
Я збираюся натисніть кнопку Далі. Я дам моїм проектом ім'я.
Я буду називати його Hello.
Цікаво, Apple припускає, що ви створюєте продукт
так що ви можете продати його, і вони можуть робити гроші.
Тут, внизу я збираюся сказати, що це iPhone додаток.
Ви можете створити IPad додаток, або якщо ви хочете створити одне з тих додатків
, Яка підтримує як пристрої, які ви можете зробити це.
Це те, що ви хочете, щоб ваші галочки виглядати.
>> Ви хочете використовувати розкадрування, яку ми побачимо пізніше,
і ви безумовно хочете використовувати автоматичний підрахунок посилань,
, Який є приємною особливістю, яка запобігає Вас від необхідності говорити Танос і безкоштовно.
Якщо ви хочете подзвонити Танос і вільно, я хотів би залишити це перевірено.
Я буду натисніть кнопку Далі, і, нарешті, це буде запитують мене, де я хочу зберегти його.
Я вдарю створити, і тут ми йдемо.
Я створив новий проект.
А тут зліва всі файли, які знаходяться всередині мого проекту,
і зауважив, що я отримав цілу купу, і я навіть не робити нічого.
IOS є великим.
>> Наприклад, ось ця ViewController.h,
це буде представляти мій перший контролер зору,
тому на першому екрані всередині мого додатка.
Тепер ми знаємо, що це говорив.
Ми говоримо, я дзвоню цьому класу ViewController,
і ViewController робить все, що робить UIViewController,
і це, знову ж таки, деяким класом, який писав, що Apple, робить багато корисних речей для нас
хотів відобразити екран.
Ось де я можу фактично почати визначення того, що мій погляд контролер робить,
і виявляється, що я дійсно не потрібно це.
Це шаблонний код, який Apple, дає мені безкоштовно.
Я зробив це потрібно перша лінія, або у мене немає класу,
так що ми можемо позбутися цього і позбутися цього.
Отже, це мій порожній екран.
>> Тепер натисніть на цю MainStoryboard.storyboard,
і це де вона починається найцікавіше.
Це являє собою перший екран на моє додаток.
Якщо я хочу, щоб додати кнопку в HTML я повинен був створити кнопку тега.
В Android ви повинні створити кнопку тега,
але в IOS, якщо я тільки приїхав сюди в правому нижньому кутку
і якщо я натискаю на це третє тут, де він говорить об'єктів,
і я можу прокрутити вниз, або я можу почати пошуки кнопки.
І подивіться, кнопки, так що якщо я насправді перетягнути прямо там,
Я тільки що додали кнопку, щоб цей екран на моє додаток.
Якщо я хочу змінити текст, я можу двічі клацніть по ньому,
сказати щось заманливо, як "Press Me".
Добре, тепер, якщо я запускаю це додаток, таким чином, ми скомпілювати його,
так, щоб запустити його я натискаю кнопку відтворення в лівому верхньому куті, і є моє додаток.
Я нічого не робив, і я отримав солодкий дивлячись iPhone додаток.
Якщо я хочу, щоб зупинити його, ви можете натиснути кнопку зупинки
тому що це більш весело.
>> Давайте припустимо, що я насправді хочете, щоб щось трапилося, коли я натискаю цю кнопку.
Щоб зробити те, що мені потрібно зробити, це мені потрібно створити
Новий обробник подій або дій.
Це означає, що мені потрібно створити певний метод, який я хочу назвати
коли я натискаю на кнопку, так давайте створимо новий метод.
Я всередині ViewController.h.
Я повинен сказати, що метод існує.
Мені потрібно дефіс спочатку, тому що я збираюся бути викликом цього на вид контролера.
Мені потрібно, щоб дати цьому типу.
Тип цього буде IBAction, що те, що ми бачили раніше.
Це обробник події, так що він збирається повернутися IBAction,
і це натяк на XCode сказати, що
це те, що я хочу, щоб телеграфувати небудь.
Я можу дати йому ім'я, як buttonPressed, крапка з комою.
>> Тепер я оголосив новий метод всередині мого класу.
Я вже говорив цей метод має своє існування.
Тепер давайте вступати в ViewController.m,
і скажемо, що цей метод може зробити.
Якщо я починаю набирати, наприклад, (недійсними) buttonPressed
повідомлення XCode дійсно хороший і autocompletes для мене.
Це дійсно чудово.
Зауважте, що всередині. М. файлу я можу також сказати, порожнеча,
і це тому, що IBAction насправді не тип.
Це насправді хештег визначена десь бути порожнеча,
і знову ж таки, це всього лише натяк на XCode, що говорить
Я хочу, щоб це обробник події, і ми побачимо, чому всього за секунду.
При натисканні цієї кнопки я збираюся зробити щось дратує
хотілося відображення спливаючого вікна.
>> Щоб зробити це, я можу створити новий екземпляр цього класу називають UIAlertView,
і це клас, який Apple, писав, що збирається показувати настирливі спливаючі вікна.
Ми називаємо це спливаюче попередження, а у мене 2 кроки, пам'ятайте, для створення цього об'єкта.
Перше, що мені потрібно зробити, це виділити простір.
Я хочу UIAlertView.
Я хочу, щоб виділити простір. Це мій перший метод.
Мій наступний метод я хочу, щоб ініціалізувати його,
і тому в мене це великий, довгий метод initWithTitle.
Це в основному збирається контролювати те, що це спливаюче вікно говорить.
Назва моєї спливаюче вікно може бути привіт.
Послання це спливаюче вікно може бути "Це IOS".
Делегат річ, я не знаю, що це таке.
Скажімо, це нічого.
Тепер кнопка, яка збирається з'явитися можете сказати щось на кшталт "Це точно",
і я дійсно не хочу ніяких інших кнопок, так що давайте видалити, що і закрийте дужку.
>> Гаразд, я створив додаткове один. Там ми йдемо.
Це, як я можу створити нове спливаюче вікно.
Якщо я хочу насправді показати спливаюче вікно я хочу назвати шоу методом.
Щоб зробити це, я можу сказати, оповіщення та шоу,
і знову, автозаповнення був супер хороший.
Якщо я забув, що це таке, якщо я тільки що ввели в с,
Я можу прокрутити тут, щоб з'ясувати, що це було,
і він фільтрує красиво.
Тепер я створив це нове спливаюче вікно.
Ми повернемося до того, що делегат означає, пізніше,
і тепер я хочу сказати, що я хочу цей метод, щоб бути звільнені
коли я натискаю на кнопку, так що я збираюся повернутися до моєї розкадровки,
і я хочу зараз надаємо цьому IBAction.
Перше, що потрібно зробити, це натиснути на кнопку.
При натисканні на цю кнопку, я хочу щось трапиться.
Я не збираюся утримувати контроль.
Я хочу, щоб перетягнути за допомогою кнопки
більше тут, де він говорить View Controller.
Ми бачимо, що це красиво світиться.
>> Якщо я відпущу з моєї миші тепер у мене є ця спливаюче вікно тут, де у мене є кілька варіантів.
Одним з них є подій, що я можу зареєструватися.
Це всі ті методи, які я оголосив в моєму ч файлу IBActions.
Це, як XCode знає, що повинен з'явитися в цьому списку мало,
так що це всього лише натяк.
Якщо я натискаю на кнопку натиснутою, я зараз зареєстрований обробник подій.
В JavaScript ми повинні були сказати у мене є певний код, який зареєстрований обробник подій.
У Objective-C це було дійсно так просто.
Якщо я запускаю цей раз
Тепер, коли я натискаю на кнопку мій обробник події буде стріляти,
і я збираюся отримати це спливаюче вікно.
Супер, супер просто немає.
>> Якщо ви завжди хочете, щоб побачити всі події, які відбуваються на реєстрацію
на компоненті, якщо я натискаю на цю кнопку
і Я прийшов сюди, щоб права сторона
Спочатку ви можете бачити тут я можу робити речі, як тип кнопки,
так що якщо ви хочете один з тих, кого я або кнопку Додати контакт
або будь-який інший.
Якщо я хочу, щоб побачити всі події, які на цій кнопці
якщо я проробив весь цей шлях сюди, на правій стороні
ми бачимо тут на події У мене є всі ці різні події.
Я можу натиснути на кнопку, коли я відпустив кнопку, коли я двічі натисніть або будь-який інший,
і той, який я тільки що зареєструвався це подія називається Touch Up Inside,
і це говорить про те, що як тільки палець відривається від кнопки
ця подія стане огнем, і це саме те, що тільки що відбулося.
Це свого роду замовчуванням кнопка натиснута події.
>> Будь-які питання досі?
Гаразд, ось як ми можемо почати з'єднувати речі в нашому коді
в речі всередині нашого інтерфейсу.
Пам'ятайте, перше, що ми повинні були зробити, це знайти код,
і тоді ми підключена інтерфейс до коду,
і є наше перше додаток.
Гаразд, це було дійсно здорово, і ми створили цю кнопку.
Що робити, якщо ми не хочемо мати, щоб створити купу властивостей
представляють ці кнопки?
Наприклад, в Tic Tac Toe у мене є 9 кнопок,
і було б супер, супер дратує потрібно перетягнути 9 разів
або якщо я повинен був зробити Tic Tac Toe з 81, а не 9
і мені довелося перетягувати 81 разів, і це кульгавий.
Що ми можемо зробити, а дуже схоже на HTML
коли у нас були такі речі, як ідентифікатори та імена, і ми можемо шукати речі
по їх ID, є аналогічні поняття в IOS називається тегами.
>> Тег це просто унікальний числовий ідентифікатор для компонента.
Якщо я кажу, це не має тега 0, наприклад,
якщо я створюю кнопку і дати йому тег 0, і ми побачимо, як це зробити всього за секунду,
якщо я хочу отримати цю кнопку Я можу просто сказати, що я хочу, щоб викликати
viewWithTag метод об'єкта тут,
self.view, який представляє поточний екран, наприклад.
Якщо я називаю це viewWithTag метод, я збираюся відійти на кнопку з міткою 0.
Давайте поглянемо на це, будівля Tic Tac Toe.
По-перше, це мої розкадровки.
Я створив ці 10 кнопок інтерфейсу.
Зверніть увагу, що всі вони однакового розміру.
Якщо я натискаю одну з них і я повернуся сюди на цій правій стороні
Ви побачите, я поправив шрифт прямо тут, тому я зробив шрифтом трохи більшого розміру,
але те, що я зробив, я поставив цей тег.
Я сказав, що це не має тег 1, і це верхньому лівому кутку.
>> Тепер, якщо я натискаю іншу кнопку, як ця друга тут,
Зараз ви побачите, що мій тег 2.
Кожна з цих кнопок просто має унікальний тег
і так це пізніше, як я збираюся почати взаємодію
з моїм додатком.
Це все всередині одного контролера уявлення,
але ось те, що у нас є.
У нас є 3 властивості тут.
Перший і останній збираємося представити стан мого ради.
В основному це Перший масив, що представляє де Xs і ОС.
Це інша говорить нам, чия черга.
Ви помітите, що у мене теж є ці речі.
Раніше, коли ми оголосили властивості, які ми дали їм назви і типу.
Ми також можемо дати їм деяку додаткову інформацію тут.
Це перший говорить неатоміческой, і що це говорить
в основному тільки одна річ ніколи не буде намагатися отримати доступ до цієї змінної за один раз.
Ви можете зробити більш складні додатки, які є багато-,
і так ще в Подряпини у нас були різні теми,
і різні спрайт можуть робити різні речі в той же час.
>> Якщо це не так, що вона не все, що ми будемо дивитися на,
якщо ми говоримо неатоміческой це насправді збираються зробити речі трохи швидше.
У нас також є те, що називається призначають, сильні або слабкі.
Це призначити просто говорить, що це стандартний тип.
Це не об'єкт або покажчик, тому що це всього лише логічний,
так BOOL вбудований в Objective-C.
Це говорить не намагайтеся нічого робити фантазії з покажчиками тут.
Це звичайний старий масштабування.
Сильні і слабкі, це слабке говорить, що насправді
Я хочу, щоб це вказує на те, з точки зору управління.
Я не збираюся насправді виділити або ініціалізації цього сам.
Interface Builder, коли я запускаю додаток, буде обробляти все, що ініціалізація.
Якщо я кажу, слабкі, говорить, що хтось буде створення цього.
Якщо я скажу, сильний, це говорить про те, що я збираюся бути один
яка створює цю дошку об'єкта,
і ось у мене є ще кілька методів тут,
Наприклад, дії, коли нова кнопка натиснута гри,
дію, коли будь-який інший натисканні кнопок
і так далі.
>> Ми не будемо вдаватися занадто багато логіки Tic Tac Toe,
хоча це дуже цікаво, але давайте поглянемо на
деякі з речей, які ми можемо зробити, всередині IOS.
Цей новий метод гри буде звільнений
всякий раз, коли я натискаю кнопку створення нової гри.
Для підключення, що до мене просто приходять до мене розкадровки.
Я натиснув на нову гру.
Якби я прийшов сюди, щоб право Я бачу, що
Touch Up Inside підключений до NewGame метод.
Ось чому це звільнять.
Метод NewGame збирається зробити деякі налаштування.
Це буде сказати, що я хочу, щоб ви ясно державного правління.
Це хороший метод змінні масиви.
Це буде сказати, що це тепер черга X,
і тепер я збираюся скористатися цим viewWithTag річ.
>> Я знаю, що мої кнопки мають теги 1-9,
і це те, що я довільно вибрав.
Якщо я хочу, щоб встановити текст кожної кнопки, щоб бути порожнім
тому що я просто почав нову гру, і я не хочу
Xs або виходи, щоб їх залишили більше я можу це зробити.
Я можу сказати, що я хочу уявлення з тегом, 1, 2, 3, 4 і так далі.
Це буде тягнути іншу кнопку кожен раз.
Тут я збираюся привести його до UIButton.
Так само, як ми могли б кинути на цілі поплавці й навпаки
це говорить про те, що я хочу кинути це UIButton.
Це означає, що типу це буде * UIButton
тому що покажчиків, але не хвилюйтеся, вони не страшні більше.
>> Як тільки у мене ця кнопка я буду називати його метод.
Цей метод називається SetTitle forState, і тому це говорить
Я хочу, щоб встановити текст кнопки, щоб бути порожнім рядком,
і я хочу, щоб це було порожнім рядком, коли вона не натиснута.
Якщо я використовую цей метод, я можу змінити текст кнопки
як тільки хтось б'є його, але ми хочемо сказати, коли кнопка просто сидів там
Я хочу, щоб текст був порожнім.
Нарешті, ми збираємося для ініціалізації мого ради,
і я хочу сказати, що всі в даний час на 0,
так що це члени ради директорів незмінні є змінюваний масив,
що означає, я можу назвати AddObject методом і тільки 0 всередині його.
Ось що відбувається, коли я створюю нову гру.
>> Давайте поглянемо на іншу.
Цей метод тут IBAction, що збирається бути натиснута
кожен раз, коли одна з цих квадратів натиснута.
Тепер у нас є Tic Tac Toe логіка.
Ми з'ясувати, чия черга,
і на основі цього ми або встановити X або O,
але ми помітили, що ми повторно цю ж обробник події
для кожного з цих кнопок.
Це означає, що у мене немає методу для верхньої лівої кнопки,
інший метод для кнопки внизу праворуч, хоча я міг би зробити це.
Що б не бути дійсно гарним дизайном.
Що я роблю тут, я насправді відбувається, щоб визначити
що тег кнопки, яка була натиснута є.
Ви помітите, що ця п'єса метод приймає один аргумент.
Це називається відправником, і те, що відправник знаходиться відправник буде
являють собою саме те, що було прийнято впливу на.
Якщо я натисну кнопку, цього відправника буде, що UIButton
що я насправді натиснута, так що означає, що UIButton
має тег, тому що я створив тегів.
>> Якщо я хочу отримати в теге Я можу просто сказати:
Я хочу, щоб теги відправника,
і знову, я тільки литих його UIButton.
Я знаю, що відправник буде UIButton.
Це не завжди повинні бути UIButton.
Я міг би, наприклад, зареєструвати той же обробник події
один для кнопки, одна для слайдера.
У цьому випадку, я знаю, що вони всі кнопки, так що я збираюся сказати
Я хочу, щоб це кнопка, і тоді я зможу отримати тег,
і з тегом Тепер я знаю, де я перебуваю всередині плати.
Тоді я можу просто встановити або X або O, може перевернути свою чергу,
перевірити, хто виграв, і так далі.
>> Будь-які питання з цього досі?
Отже, весь код, ми розмістили онлайн-ми не хочемо, щоб потрапити в занадто багато
з логіки Toe Tic Tac, але тепер ви можете бачити, що насправді
все, що ми робимо, ми цикл з цього масиву,
тому ми маємо пару циклів тут, і ми просто порівняння, щоб побачити
у нас є матч у всіх рядках, матч у стовпці або що-небудь подібне.
Щоб дійсно запустити це додаток, якщо я натискаю на одну з цих кнопок
що гра метод був звільнений, так, значить, я просто встановіть
Кнопка бути X, так що тепер ця кнопка буде O, і так далі,
і ось як ми починаємо взаємодіяти з одним додатком сторінці.
>> Ми будемо публікувати код, так що не соромтеся, щоб переглянути, що,
Але давайте тепер поговоримо про деяких додатків, які більше, ніж просто одна сторінка.
Настільки ж захоплюючий, як Tic Tac Toe було, багато додатків всередині IOS
є свого роду ці деталізації речей з декількома екранами.
Перша концепція, що ми повинні говорити про протоколи,
і протоколу є просто набором методів
що ви можете обіцяти визначити.
Якщо я створюю новий протокол з 2-ма методами, це перше,
якщо повертаний тип є нікчемним, я назвав його Foo.
Він не приймає аргументів. У мене є інший метод.
Вона повертає Int. Я назвав його барі, і вона приймає один аргумент.
Все це протокол є те, що називається SomeProtocol тут,
це набір речей, які хтось може реалізувати.
Я не всередині цього протоколу сказали, що Foo робить.
Замість цього, я просто кажу, ви могли б визначити Foo, якщо ви хочете.
Якщо я створюю уявлення-контролер або створення класу
Я можу всередині цього класу обіцянку реалізувати
деякі з цих методів, так, наприклад, якщо говорити
це зараз говорить, що я роблю вам обіцянку, що всередині
цього класу контролера зору мені доведеться визначень для обох Foo і бар.
>> Чому це корисно?
Багато компонентів всередині IOS скористатися цим
шаблон проектування називається делегацією, і те, що делегація говорить
є те, що, наприклад, якщо у мене є текстове поле
і є деякі події, які можуть бути зареєстровані в моїй текстове поле,
замість створення окремої події, що я можу зробити, це я можу сказати,
Делегат це текстове поле буде деякий об'єкт.
Коли я кажу, що це делегат тепер, що означає, що
всякий раз, коли деякі події були б звільнені в текстове поле
замість того, щоб зареєструвати його або що-небудь на зразок цього
він просто буде викликати метод делегата.
Наприклад, у моїй текстове поле у ​​мене є метод, коли я натискаю
що зробити кнопку в правому нижньому кутку,
і т.д., а не реєстрацію обробника події, що я можу сказати,
текстове поле, ось це об'єкт, який я хочу, щоб викликати метод
кожен раз, коли хтось натискає кнопку Готово,
і це означає, що цей об'єкт має для здійснення деяких протоколів
говорить, що я обіцяю, щоб визначити, що робити кнопки дії,
тому що, якщо він не визначає, що метод, і ви натисніть Готово,
Потім вона збирається вводити в оману.
>> Давайте подивимося на прикладі.
Тут я просто одне текстове поле,
і однією з властивостей цього текстового поля тут на цьому права частина делегатів.
Це властивість класу.
Що я зробив тут я можу контролювати натиснута, і я потягнув з цього місця тут
на подання-контролер, а тепер говорить делегат це поле
буде подання-контролер.
Це означає, що, коли деякі дії відбуваються, а не реєстрації
окремі обробники подій, я хочу, щоб ви відправити їх на делегат.
Тепер давайте поглянемо на мій погляд контролер.
Усередині. Файл ч я дав обіцянку.
Я обіцяв виконати деякі методи усередині цього протоколу
називається UITextFieldDelegate, і знову,
це лише деякі список деяких речей, які я можу вибрати для реалізації.
>> Якби я приїхав сюди в моїй. М. файлу, я реалізував один із таких методів.
Я назвав його textFieldShouldReturn
тому що це, як це називається всередині протоколу.
І тепер щоразу, коли я натискаю кнопку Готово всередині цього текстового поля
Це те, що збираюся називати, так що я не зареєструвати обробник подій.
Я підключений делегата, і всякий раз, коли це подія
це метод, який буде викликаний, так що якщо я приходжу сюди, щоб мої розкадровки та запустити його-
Хоча це вантаженні ми можемо бачити, що вона робить.
На моєму екрані у мене є 2 речі.
У мене є текстове поле, і у мене цей ярлик.
Я просто говорю, я хочу, щоб текст цієї мітки
рівним будь-який користувач ввів всередині текстового поля.
У наступному рядку тут просто метод, який я дзвоню
на текстове поле, яке говорить, що я хочу, щоб ви приховати клавіатуру.
Це всього лише довільні метод, який Apple, вибрав.
>> Знову ж таки, перш ніж я нічого не робив, я повинен був зв'язати всі, так що я вперше приїхав сюди.
З точки зору контролера я перетягнути в текстове поле.
Я відпустив, і я бачу тут, що я можу зробити це властивість текстового поля
так як тут, на думку контролера я визначив власності
тобто IBOutlet текстового поля.
Це говорить про те, що я можу підключити цю власність до
в текстовому полі в моїй користувальницького інтерфейсу.
Тепер, коли я натискаю цього я можу почати друкувати.
Тепер, якщо я натисніть кнопку Готово, це буде стріляти
подія, що я можу зараз відповісти.
Ні обробників подій.
Ось як я тільки що відповів на кнопку Готово.
Сенс?
>> Це не шаблон проектування, що-Ви не могли б коли-небудь опинитеся
створення власного протоколу, але точно знаю, що деякі
різних компонентів IOS реєстрації подій по-різному.
Кнопки, наприклад, використовувати ці IBActions.
Текстові поля, з іншого боку, будемо використовувати делегати.
Ми бачимо, і ви можете дивитися все, що всередині документації.
До речі, там насправді тонни матеріалу користувальницький інтерфейс вбудований в IOS для вас,
так, наприклад, так, як я зробив, які говорять, зробив у правому нижньому кутку
Я вибрав в цьому текстовому полі.
Я прийшов сюди.
Я прокручується трохи вниз, щоб повернути ключ,
і я можу насправді зробити це ціла купа речей, наприклад, якщо я хочу сказати, що
екстреного виклику, а я можу це зробити, що зовсім випадково,
і я не знаю, чому є вбудований екстреної служби кнопки,
але ні, він говорить, екстрений виклик в дійсності маленької літери.
Там ви йдете.
>> Виразно вивчити всі ці різні варіанти в IOS.
Будь-які питання по делегати?
Знову ж таки, цікавий шаблон дизайну, що ви повинні бути в курсі.
Гаразд, давай наступний глянемо на таблицю вид.
Таблиці в основному, що список предметів, які на всьому протязі місця в IOS.
Коли ви переглядаєте всі ваші контакти, ви дивитеся на
настройка сторінки, і такий список речей, називається таблиці.
Реалізація таблиці в IOS досить проста.
Замість того класу, який спускається від UIViewController
як ми робили раніше ми просто повинні сказати, а не
всі UIViewController ж я хочу зробити,
Я кажу все UITableViewController ж я хочу зробити,
так що просто додає деякі додаткові речі, які абсолютно для нас зробив.
Нам потрібно зробити дуже мало в основному заповнити прогалини всередині таблиці.
>> Для того, щоб відобразити таблицю мені потрібно відповісти на кілька запитань.
Перше питання, яке мені потрібно відповісти, скільки секцій в таблиці?
Коли ви переглядаєте ваш додаток контакти ви помітите, що це свого роду
організована як, то у вас є сніданок, і у вас є, що трохи на південь заголовку.
Кожен з них називається розділ.
Ви можете або не потрібно це.
Перше, що вам потрібно зробити, це реалізувати метод
називається TableView: numberOfSectionsInTableView.
Це просто повертає скільки секцій у вас є,
так що можна сказати, повертати одне якщо у вас є одна велика вистава таблиці.
Наступне питання, яке IOS повинен знати, скільки рядків у вас є?
Наприклад, ви переглядаєте таблиці.
У вас є фіксована кількість пісень, ви дивитеся на або фіксована кількість контактів.
Якщо ви мене, звичайно, не так багато,
і ось як IOS знає, скільки клітин на форумі.
>> Знову ж, це може сказати щось на кшталт повернення 3.
Моя таблиця має 3 ряди.
Нарешті, IOS повинен знати, що кожна клітина виглядає,
Так що це насправді збираюся зробити, це викликати цей метод тут,
це TableView: cellForRowAtIndexPath.
Це буде викликати цей метод на кожну комірку всередині таблиці.
Як це знаю, скільки разів це назвати?
Ну, ви сказали, що всередині кількість рядків у розділі.
Ми будемо називати це на кожній з наших клітин,
і всередині це де ви можете робити речі, як
набір тексту або сказати вам, що це трохи синьою кнопки на правій стороні робить.
Шаблон для отримання цих клітин, ми збираємося використовувати цей метод
називається dequeueReusableCellWithIdentifier.
>> Objective-C насправді дуже добре відомі за смішну довжина їх імена методів,
і це дійсно хороша мова приклад.
Що цей метод робить це просто говорить, що я хочу, щоб ти дав мені камеру.
Просто річ IOS.
Якщо у вас є щось подібне 100000 композицій на ставку
IOS, що не хочете зробити, це виділити 100000 клітин,
тому що якщо ви у верхній частині списку, вам дійсно потрібно виділити пам'ять
на осередок, 99000 рядків вниз?
Ні, тому що, як ви прокрутки можна виділити види, як ви йдете вперед.
Це робиться для вас.
Вам не доведеться турбуватися про те, що всі дурні речі продуктивності.
Всі ви говорите, ви викликаєте цей метод dequeueReusableCellWithIdentifier,
і це говорить, добре, якщо вам потрібно, щоб я збираюся створити новий осередок для вас.
>> Але якщо ви в нижній частині таблиці, і ви вже виділив деякі клітини
у верхній частині таблиці, що ви дійсно не знадобляться найближчим часом
Я збираюся дати вам один з тих спині замість виділення нового,
, Так що це хороший заклопотаність продуктивності.
Ви не повинні виділяти клітини самостійно.
Це дасть вам назад в клітку.
Це збирається повернутися до вас осередку об'єкта.
Якщо у вас є клітка об'єкта, ви можете робити речі до нього.
Ви можете встановити текст комірки з цією властивістю називається текстова мітка.
Можна додати, що стрілка на правому або інші випадкові речі
З цим іншим властивістю accessoryType, і так далі і так далі.
>> Давайте поглянемо насправді реалізації таблиці зараз.
Коли я створив цей проект
а не говорити один додаток зору, я насправді прийшли сюди
на майстер-деталь додатків, а так в основному це відповідає пошти додаток
на IPad з таблицею, вид на лівий, а потім вміст праворуч.
На ставку або iPhone це буде відповідати одному уявлення таблиці.
Ось де я отримав свій стартовий код.
>> Давайте спочатку подивимося на аркуші розкадрування.
Все це було зроблено для мене, в основному створена.
Ця панель навігації показав мені, що наприклад клітини можуть виглядати,
і я можу двічі клацніть цим, змінити назву.
Будь-які інші проблеми користувальницького інтерфейсу я можу впоратися там.
В заголовку файлу виглядає дуже просто.
Замість того, кажуть, що це UIViewController ми зараз говоримо, що це
TableViewController, тому ми знаємо, що ми хочемо закликати всіх цих методів таблицю.
Далі я хочу створити властивість, яка збирається представляти
речі в моїй таблиці.
Ця таблиця буде довільно відображати
Список фруктів, і тому мені потрібно створити кілька масивів
, В якій я можу вставити свої плоди.
Усередині мого файлу реалізації Перше, що я хочу зробити
, Я хочу переконатися, що я ініціалізувати цей масив.
>> Я сказав ідентифікатор ініціалізації, створив свій плід масиву,
і я додаю 4 речі до нього, одним з яких є набагато більш спірним, ніж інші 3.
І тепер у мене є масив розміром 4.
Ми струшуючи його в CS50.
Тепер у мене є масив розміром 4.
Тепер я збираюся почати відповідати на ці питання, і насправді,
Коли я створив це додаток все це вже було зроблено для мене.
У мене не було набирати з числа секцій у вигляді таблиці.
Він вже був там, і я заповнюючи прогалини.
Скільки розділів у мене є?
One. Все зроблено.
Скільки рядків у мене є?
Ну, у мене по одному рядку для кожного плоду, так це кількість
є властивістю будь масив, який говорить, наскільки він великий?
Ось скільки рядків у мене є.
Нарешті, я повинен сказати, що ж кожна клітина виглядає?
Я збираюся сказати dequeueReusableCellWithIdentifier.
>> Знову ж таки, це була вже написана для мене.
Я не повинен був зробити це сам, і я хочу, щоб повернутися
ця клітина в цьому місці.
Пам'ятайте, що ми називаємо цим же методом, на кожну клітину,
і цей аргумент тут, цей аргумент indexPath,
говорить, що рядки я дюйма
Якщо я скажу, indexPath.row тут
це буде 0, то це буде 1, то це буде 2, і це так, я знаю,
що клітина я в даний час відображення.
Я хочу, щоб встановити текст комірки за допомогою цієї властивості textLabel
піти в мою фрукти масив і отримати
об'єкт, відповідний кожному рядку.
Якщо це рядок, я тепер установка
Текст власності в рядок.
Я можу зробити ще одну річ.
Я також можу зареєструвати обробник подій по кожному з клітки,
тому, коли я натискаю кожної з цих клітин
це didSelectRowAtIndexPath, це буде називатися для мене,
так просто, визначивши це, я тепер може обробляти те, що відбувається
При натисканні на осередок, і знову, ми передаємо в якій клітини постукав
так що ми можемо використовувати цю ж обробник події для всіх наших клітин.
>> Знову ж таки, це те, що IOS робить для мене.
Давайте відображення інший дратівливих спливаючих
, Який просто говорить, що ви вибрали те, де щось
буде рядок об'єкта.
Коли я запускаю це, я буду мати це хороший вигляд таблиці
по одному рядку для кожного з цих плодів, і якщо я натисніть на одну
він говорить мені, що сталося.
Сенс?
Давайте побудуємо трохи більше Комплекс додатків,
стільки, скільки ви вибрали натиснувши помідор.
Добре в розкадруванні
воно не тільки допоможе нам екранів дизайн індивідуально,
це також допоможе нам зв'язати воєдино всі наш додаток,
так що остаточне додаток ми будемо Будинок це хороше спортивних новин читач,
і тому він буде мати кілька екранів, і тому я можу насправді являють
кожен з цих декількох екранів на розкадруванні
і я можу зменшити масштаб і побачити моє додаток від високого рівня.
>> Для того, щоб створити новий елемент у моєму розкадровки
це дійсно просто всередині Interface Builder.
Якщо я хочу додати ще один екран для цього, наприклад,
Я спочатку не зменшити масштаб з дрібкою масштабу, що Яблуко любить так багато,
і тут, перш ніж я шукати кнопку
і я перетягнути кнопку
якщо я хочу, щоб створити новий екран я можу насправді просто перетягнути
Весь вигляд контролера, так що якщо я беру це, витягнути його сюди,
Гей, є ще один екран, і тепер за допомогою цього ж файлу розкадровки
Я можу мати всі екрани всередині мого додатки, і я можу зменшити масштаб
і подивитися, як вони взаємодіють.
Вони не будуть взаємодіяти ще немає.
Те, яким чином ці 2 екрану взаємодії є ви визначаєте відносини.
Ви можете сказати, що це в основному екрані, при натисненні на цю кнопку,
Я хочу, щоб ковзати по цьому новому екрану.
Це означає, що існує такий зв'язок між
На першому екрані і на другому екрані.
Вам доведеться в основному стрілку від цієї кнопки на другий екран
говорить, що, коли ви натискаєте на цю кнопку, ось де я хочу піти.
Так само, як ми контролюємо клацнуло, і потягнув для визначення цих точок
Ми збираємося зробити те ж саме для визначення цих segues.
>> Ми побачимо, наприклад, для цього, і перш, ніж ми насправді перехід
з одного дисплея на інший IOS достатньо хороший, щоб викликати цей метод
називається prepareForSegue, і це те, де ми можемо почати
відправка даних з однієї програми в іншу.
У цьому прикладі ми збираємося дивитися на це будуть в основному дозволяють нам
для фільтрації бейсбольних команд на ліги і підрозділів.
Коли я вибираю ліги, наприклад, я хочу переході
до мого наступного екрана, де я можу показати всі підрозділи
У цій лізі або всі різні команди.
Мені потрібно відправити на той екрані те, що команди ви повинні переглядів.
Для цього я збираюся скористатися цим методом тут.
>> Нарешті, просто випадкова точка на IOS.
Якщо ви хочете зберігати дані є те, що називається основними даними,
який насправді вигляд складно працювати.
Ви також можете використовувати SQL для зберігання даних,
який, знову ж таки, добре, але вид на більш складні сторони в роботі,
але IOS також підтримує ці дійсно цікаві речі називаються списки властивостей,
і список властивостей це просто файл, який представляє пар ключ-значення.
Ви визначаєте список ключів, а ви кажете ця клавіша буде масивом.
Цей ключ буде рядок, і в основному все, що ви можете зробити
У JSON ви можете зробити всередині списку властивостей,
і таким чином, це дійсно приємно дозволяє нам працювати з деякими даними.
Наприклад, у мене є ця Teams.plist, що я створив.
Я створив новий файл PLIST, і я можу деталізувати.
Це словник, це словник, ці рядки,
, Так що це хороший графічного представлення документів JSON
або просто набір пар ключ-значення,
і так це дані, які я буду працювати всередині мого додатка.
>> Давайте спочатку йди сюди. У нас є багато інших файлів в даний час.
Але давайте спочатку приїхати сюди на розкадрування.
Розкадровка тут, якщо я можу зменшити масштаб-
Тепер ми можемо бачити, що це потік моє додаток.
Я перший почну на цьому екрані.
Я збираюся перейти до цього екрану,
і я збираюся перейти до цього екрану, і ми бачимо тут, що якщо я як би
перемістити один із цих навколо ми ці стрілки, що йдуть від сих до сих,
і те, як я визначаю, що стрілка була, якщо я збільшу трохи,
і якщо я прийду до цієї точки зору контролера,
і ось клітка, і я хочу сказати, що, коли ви натиснете на осередок
Я хочу, щоб ковзати на інший екран.
Я можу просто утримувати контроль,
прокрутки по трохи, утримуйте контроль, перетягнути цю комірку знову і відпустити.
>> І тут ми говоримо, що той перехід, який ви хочете використовувати?
Ви хочете використовувати цей слайд річ, яка називається поштовх?
Ви хочете, щоб ковзати знизу вгору?
Це називається модальним.
І як тільки я натискаю одну з них, він збирається зробити цю стрілку для мене,
і це означає, що я насправді обробляються, що відбувається, коли я натискаю цю кнопку в графічному вигляді.
Я не писати ніякого коду насправді ковзати від одного екрана до наступного.
Я визначив це візуально всередині Interface Builder.
Якщо я натискаю на цю стрілку, ми бачимо, що Я дав цю річ ім'ям.
Я назвав його showDivisions, і це так, що я можу знати
що перехід може відбутися, і ми побачимо, чому тільки в сек.
Ось як я підключив різних екранах в моє додаток.
Якби це була кнопка, наприклад, замість таблиці,
Я міг контролювати натиснути на кнопку, перетягнути на наступний екран,
і ось як я можу зробити навігацію таким чином.
>> Дійсно швидко, якби ми вступили в MasterViewController,
знову ж таки, ми просто збираємося визначити список речей,
, Який буде відображатися у вигляді таблиці.
Тут я говорю, що я хочу, щоб ви, що PLIST файл,
і я хочу, щоб ви завантажите його в словник,
і як тільки ви цього словника, я збираюся відповісти на ці ж питання знову.
Ось ряд розділів.
Один з них, є по одному рядку для кожної лізі, і текст кожного осередку
повинні бути або першим, перша ліга, друга ліга, і так далі.
Нарешті, я збираюся використовувати цей метод, який ми тільки що бачили називається prepareForSegue,
і це метод, який буде звільнений, коли я натискаю
на одній з цих рядків і, отже, активація, що перехід
що я створив за допомогою стрілок.
Це говорить, що в мене може бути кілька
відносин з одного дисплея на інший.
Якщо у мене є 2 кнопки і кожну кнопку, Ви потрапите на інший екран
Я збираюся мати 2 segues, 1 для кожної кнопки.
Але це prepareForSegue, знову ж таки, буде повторно
для кожного з різних відносин, так це значить, що мені потрібен спосіб
виявлення, якщо натиснути першу кнопку або натисканні на другу кнопку.
>> Пам'ятаєте, коли я дав, що перехід назву, це showDivisions,
Ось як я тепер знаю, що це перехід, який був активований.
Все, що я хочу зробити, це я хочу сказати,
Я хочу з'ясувати, що я тільки що вдарив,
і так, щоб отримати це, я можу сказати, що я хочу indexPath для обраного рядка,
пам'ятаю indexPath просто говорить, де я тільки що натиснули,
і тоді я хочу сказати, що я хочу, щоб з'ясувати, куди я йду.
Це destinationViewController, це властивість переходити.
Ось на екрані я збираюся,
так що я знаю, що на екрані я збираюся називається DivisionsViewController
тому що я створив цей клас,
І ось тепер, якщо я скажу d.divisions
Я тепер встановивши властивість уявлення-контролер я збираюся піти.
Це, як я передача даних з одного дисплея на інший екран.
>> Просто дивлячись на цю DivisionsViewController
Ви можете бачити тут, що у файлі. Ч
Тобто те, що майно підрозділи, і ось що я в основному заповнення,
так от як я знаю, що я відображенні відповідного підрозділу
ліги, що я натиснув, і знову,
фактичний вид таблиця виглядає майже так само, тільки відповідаючи на ці
3 простих питання, а також виявлення
що відбувається, коли ви переходите до наступного екрану.
Ще пару інших речей.
Ви помітили, у верхній тут, що замість того, щоб говорити # включити
Я зараз говорю # імпортувати.
Це тільки Objective-C річ.
Імпорт в основному краще версії включають в себе,
і, наприклад, ми повинні знати, що цей клас,
тому я не можу просто сказати DivisionsViewController.
Якби ми не хештег standardio.c всередині нашого. Файл з
компілятор не знав, що Printf було.
Точно так само, якщо я не імпортувати DivisionsViewController
компілятор насправді не знає, що DivisionsViewController є.
Просто переконайтеся, що у Вашому різні. Файлів м ви переконаєтеся, що імпорт
відповідна. ч. файли, так що компілятор не знає, що відбувається.
>> Нарешті, те, що Apple, в кінцевому рахунку, робить це показати деякі дані за допомогою веб-перегляду,
і т.д. Ваш погляд об'єкта, в якому Ви можете вставляти
трохи веб-браузер всередині вашого застосування.
Все, що вам потрібно зробити, це надати URL вашого веб-браузера,
так що я хочу піти в mlb.mlb.com,
і це, як я можу отримати доступ до домашньої сторінки для кожної команди,
і так, передаючи в цьому URL
Ваш може відображатися це для мене, і я можу переглядати навколо,
і тренажер використовується той.
Тепер це прийшло від моїх PLIST.
Якщо я натискаю цю цього також прийшли з моїх PLIST, і це ковзання було перевалено
шляхом визначення тих segues.
Я натискаю цю і ще одну,
і тепер ось моя UIWebView, тому просто так
ось сайт для URL, які я тільки вбудовані,
і в мене не було, щоб впоратися з чим завгодно з розуму.
Це, як відображати веб-сторінки.
Такі речі, як ця кнопку назад тут також дано мені
абсолютно безкоштовно, тому що я визначив ці відносини використанні segues.
>> Є питання? Так.
[Студент] Отже, коли ви використовуєте ідентифікатор, вам ніколи не доведеться нічого безкоштовно?
Саме, коли ви дзвоните ідентифікатор ініціалізації і вам не доведеться звільнити його.
IOS буде обробляти все це для вас.
Це чудово, і ти не порушуючи жодних правил. Так.
[Студент] Якби ви були, щоб включити більше команд, які можуть поміститися на екрані,
буде автоматично мати опцію прокручування, або це щось потрібно додати?
Саме так, якби я мав більше команд, наприклад, він би автоматично обробляти
прокручування для мене, і всі проблеми продуктивності
з величезним столом також здійснюється абсолютно для мене.
>> Інші питання?
Все це код буде розміщений.
Ми як би затушовується трохи більше дрібних деталей,
але речі, як встановити деякі властивості для веб-перегляду
просто речі, які ви можете отримати, перейшовши за посиланням документації Apple,
що дійсно, дуже красиво викладені.
У них є багато зразків додатків і приклад призначення
різних API, так виразно переглянути їх, якщо можна.
Просто деякі корисні посилання, які ви, можливо, захочете поглянути на.
Ось деякі корисні керівництва документації.
URL-адреси, масивні, так що вони скорочені.
Це перша є цілої бібліотеки документації.
Там мало барів пошуку, так що якщо ви починаєте набирати кнопки
вона почне давати вам всю інформацію про все, що можна зробити з кнопкою.
Я також включив програмування Table View Guide.
Він обробляє таблиці представлення в набагато більш докладно,
як робити такі речі, як динамічно додавати або редагувати клітин клітини або видалити їх.
>> Там багато зразків додатків від Apple, яка покаже вам, як це зробити,
І, нарешті, ця остання є Основні принципи обліку людського інтерфейсу,
і це в основному деякого обговорення компонентів для користувача інтерфейсу,
такі речі, як не зробити кнопку, що на 4 пікселя на 4 пікселя.
Це погана ідея, і інші речі, які Яблуко хоче, щоб ви
заохочення хорошого дизайну.
>> Будь останніх питань, перш ніж ми закінчимо?
Гаразд, безумовно, не соромтеся-ми будемо мати спеціальні етикетки на обговорення.
Ми повинні IOS один, так що безумовно не соромтеся використовувати це.
Якщо ви хочете працювати зі своїми однокласниками по проектам
або допомогти з'ясувати деякі випадкові речі IOS
не соромтеся, напишіть мені, і, безумовно, переглядаємо весь код онлайн, тому що
тільки в інтересах економії часу ми якось замовчується більше
тонкозернистий деталі речі.
Але якщо ні, то удачі у ваших проектах IOS, і я сподіваюся, що у нас є
великий приплив додатків в App Store.
[CS50.TV]