1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Семінар] [IOS: Написання додатків, таких як Boss] 2 00:00:02,000 --> 00:00:04,000 [Tommy MacWilliam] [Гарвардський університет] 3 00:00:04,000 --> 00:00:08,000 [Це CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Гаразд, все, ласкаво просимо в IOS: Написання додатків, таких як Boss. 5 00:00:12,000 --> 00:00:16,000 Цей семінар буде зосередитися на написанні додатків для iPhone 6 00:00:16,000 --> 00:00:19,000 і в свою чергу написання додатків для iPad, і тому ми в основному будемо ходити через 7 00:00:19,000 --> 00:00:23,000 кілька різних прикладів того, як зробити додаток, простий грі, як Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 або якщо ви більше зацікавлені в створенні додатків, як свого роду читання новин 9 00:00:26,000 --> 00:00:30,000 або щось, що взаємодіє з інтернетом я буду говорити про те, що, як добре. 10 00:00:30,000 --> 00:00:32,000 Ось наш короткий порядку денного. 11 00:00:32,000 --> 00:00:36,000 >> IOS додатків написані на мові, званому Objective-C, 12 00:00:36,000 --> 00:00:39,000 і таким чином, це трохи схожий на C, але насправді не на всіх, 13 00:00:39,000 --> 00:00:41,000 таким чином, ми будемо говорити трохи про саму мову 14 00:00:41,000 --> 00:00:45,000 , А потім, як побудувати iPhone додатки за допомогою цього додатка програма під назвою XCode, 15 00:00:45,000 --> 00:00:48,000 яка, якщо ви ще не завантажили його ще, не соромтеся, щоб почати завантаження зараз. 16 00:00:48,000 --> 00:00:50,000 Це кілька гігабайт. 17 00:00:50,000 --> 00:00:54,000 Вона повинна бути вільна від App Store, так що вам необхідно мати Mac 18 00:00:54,000 --> 00:00:57,000 ідеально працює під управлінням останньої версії OS X. 19 00:00:57,000 --> 00:00:59,000 Якщо ви не, не проблема. 20 00:00:59,000 --> 00:01:02,000 У нас є комп'ютери Mac в науковому центрі у вашому розпорядженні 21 00:01:02,000 --> 00:01:05,000 з XCode встановлений, і тому не соромтеся використовувати їх для розвитку. 22 00:01:05,000 --> 00:01:07,000 Якщо ви хочете, щоб додаток, але не мають Mac, не хвилюйтеся. 23 00:01:07,000 --> 00:01:09,000 Там є багато кампуса ресурсів для цього. 24 00:01:09,000 --> 00:01:15,000 І тоді ми збираємося охопити 2 великих приклади різних додатків, які ви можете зробити. 25 00:01:15,000 --> 00:01:19,000 Objective-C є технічно те, що називається супер набір C. 26 00:01:19,000 --> 00:01:24,000 Це означає, що будь-який код C справедливо і Objective-C код. 27 00:01:24,000 --> 00:01:29,000 Це означає, що ми як би ізолюючу плівку на деякі додаткові функції C. 28 00:01:29,000 --> 00:01:33,000 Деякі з цих функцій включають в себе не того, щоб коли-небудь написати Танос раз, слава Богу, 29 00:01:33,000 --> 00:01:36,000 не турбуючись про тих дурних покажчики і звільняючи їх і все таке 30 00:01:36,000 --> 00:01:40,000 Ви ненавидів C, і це частково пішли в Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Тепер, Objective-C також має набагато більше стандартної бібліотеки, 32 00:01:43,000 --> 00:01:47,000 так що є набагато більше функціональних можливостей ви отримуєте безкоштовно всередині Objective-C. 33 00:01:47,000 --> 00:01:50,000 Пам'ятаєте, коли ми писали PHP ми помітили, що ми перейшли від 34 00:01:50,000 --> 00:01:54,000 це найменший мову гігантські бібліотеки всі ці божевільні речі, які ви можете зробити. 35 00:01:54,000 --> 00:01:56,000 Те ж саме відбувається в IOS. 36 00:01:56,000 --> 00:01:59,000 Там в об'єкти для таких речей як календар буддист, і дійсно нічого 37 00:01:59,000 --> 00:02:05,000 можливо, ви можете думати, ймовірно, вже існує в реалізації Objective-C. 38 00:02:05,000 --> 00:02:08,000 Об'єктивна сторона Objective-C посилається щось 39 00:02:08,000 --> 00:02:11,000 називається об'єктно-орієнтоване програмування. 40 00:02:11,000 --> 00:02:14,000 Це свого роду нова концепція, але ми насправді головним чином дізнався, 41 00:02:14,000 --> 00:02:17,000 Багато хто з цих концепцій вже. 42 00:02:17,000 --> 00:02:19,000 Ідея об'єктно-орієнтованого програмування є те, що ви будете структурувати 43 00:02:19,000 --> 00:02:23,000 Багато коду навколо цих речей, які називаються класами, 44 00:02:23,000 --> 00:02:26,000 і ці класи дійсно прославив структур. 45 00:02:26,000 --> 00:02:30,000 Усередині структури, ми в основному тут сказати, це річ, 46 00:02:30,000 --> 00:02:32,000 і ця річ може мати членів. 47 00:02:32,000 --> 00:02:35,000 Наприклад, вузол пов'язаного списку може є інші речі, 48 00:02:35,000 --> 00:02:38,000 як значення, покажчик на наступний вузол в списку, 49 00:02:38,000 --> 00:02:44,000 і разом, що покажчик, і це значення полягає цей екземпляр структури. 50 00:02:44,000 --> 00:02:47,000 Класи дуже схожі, за винятком 51 00:02:47,000 --> 00:02:50,000 Класи також можуть мати функції всередині них. 52 00:02:50,000 --> 00:02:54,000 Коли ми оголосили структуру, ми можемо тільки сказати, Int N або вузла * наступний. 53 00:02:54,000 --> 00:02:57,000 >> Тепер з Objective-C ми дійсно можемо покласти функції 54 00:02:57,000 --> 00:02:59,000 Усередині цих речей. 55 00:02:59,000 --> 00:03:03,000 Інша справа, що класи можуть зробити це вони можуть успадковувати дані з інших класів. 56 00:03:03,000 --> 00:03:07,000 Наприклад, ми будемо дивитися на купу вбудованих в Objective-C класи. 57 00:03:07,000 --> 00:03:11,000 Один з них може бути клас, який представляє вид на екрані, 58 00:03:11,000 --> 00:03:14,000 і це, кажучи, що я хочу, щоб реалізувати мою власну точку зору 59 00:03:14,000 --> 00:03:18,000 ми в основному говорять, що хтось більш на Apple, імовірно, дійсно хороші люди, 60 00:03:18,000 --> 00:03:21,000 написав цей клас для мене, і він обробляє такі речі, як відображення кнопок 61 00:03:21,000 --> 00:03:25,000 або надання екрані, і ми б дуже боляче 62 00:03:25,000 --> 00:03:28,000 реалізувати все, що функціональність самих себе, і так просто 63 00:03:28,000 --> 00:03:31,000 спадкування даних, ми можемо сказати, що все, що ви зробили в цьому класі 64 00:03:31,000 --> 00:03:34,000 Я також хочу всередині мого класу, а потім я збираюся зробити деякі інші речі, 65 00:03:34,000 --> 00:03:37,000 а саме здійснення додаток. 66 00:03:37,000 --> 00:03:40,000 Це те, що це слово означає спадок. Ми побачимо більш конкретний приклад. 67 00:03:40,000 --> 00:03:42,000 >> І, нарешті, ключ з об'єктно-орієнтованого програмування є те, що 68 00:03:42,000 --> 00:03:45,000 це призводить до інкапсуляції даних. 69 00:03:45,000 --> 00:03:48,000 У деяких з наших проблемою задає ми могли б мати ці великі, глобальні змінні 70 00:03:48,000 --> 00:03:51,000 і глобальні скрізь, і це, як ми б відслідковувати стан. 71 00:03:51,000 --> 00:03:55,000 З класами ми можемо почати інкапсуляції інформації всередині об'єкта. 72 00:03:55,000 --> 00:03:58,000 Якщо у нас є один екран на наш додаток, ми дійсно не потрібно мати будь-яких даних з 73 00:03:58,000 --> 00:04:01,000 інший екран в наш додаток всередині, що, 74 00:04:01,000 --> 00:04:04,000 і так шляхом інкапсуляції речі в класах це насправді призводить 75 00:04:04,000 --> 00:04:08,000 щоб краще норм проектування, а це можливо з деякими додатковими функціями 76 00:04:08,000 --> 00:04:11,000 з Objective-C. 77 00:04:11,000 --> 00:04:15,000 Попередженням, синтаксис Objective-C є бананів. 78 00:04:15,000 --> 00:04:19,000 Це все одно ми нічого не бачили раніше, 79 00:04:19,000 --> 00:04:22,000 так що це трохи кривий навчання звикають до 80 00:04:22,000 --> 00:04:24,000 Якого біса це означає? 81 00:04:24,000 --> 00:04:27,000 Але як тільки Ви закінчуєте, що початкова крива навчання, це дуже, дуже гладка 82 00:04:27,000 --> 00:04:29,000 , Щоб почати писати програми. 83 00:04:29,000 --> 00:04:33,000 >> Щоб оголосити клас, якщо не сказати ось мій клас, він існує, 84 00:04:33,000 --> 00:04:35,000 і, можливо, тут деякі речі, які я збираюся визначимо пізніше, 85 00:04:35,000 --> 00:04:38,000 Я збираюся сказати @ інтерфейс. 86 00:04:38,000 --> 00:04:41,000 Я збираюся сказати @ інтерфейс. Я збираюся дати моєму класу ім'я. 87 00:04:41,000 --> 00:04:43,000 А потім десь в іншому місці я збираюся сказати @ кінця, 88 00:04:43,000 --> 00:04:46,000 і всі між ними @ інтерфейсом і @ кінця 89 00:04:46,000 --> 00:04:48,000 буде мій клас. 90 00:04:48,000 --> 00:04:51,000 Це буде те, що всередині нашого. Файлів годину. 91 00:04:51,000 --> 00:04:55,000 Так само, як у З нашим. Ч файли в основному сказали, ось деякі речі, які будуть існувати. 92 00:04:55,000 --> 00:04:57,000 Я не обов'язково кажу вам, що вони роблять, тим не менш, 93 00:04:57,000 --> 00:04:59,000 але компілятор повинен знати, що вони існують. 94 00:04:59,000 --> 00:05:04,000 Пізніше всередині нашого. М. файли, тому що м для Objective-C 95 00:05:04,000 --> 00:05:08,000 то, де ми насправді збираємося визначити, що ці класи. 96 00:05:08,000 --> 00:05:11,000 Багато чого, як наша. Файлів с, за умови, реалізація функцій. 97 00:05:11,000 --> 00:05:15,000 Усередині нашої. М. файл, який ми збираємося сказати ось те, що всі функції 98 00:05:15,000 --> 00:05:18,000 всередині мого класу, що вони все роблять. 99 00:05:18,000 --> 00:05:22,000 І, нарешті, внутрішньої структури, можна сказати, в тих фігурні дужки 100 00:05:22,000 --> 00:05:25,000 Int N або вузла * наступний, 101 00:05:25,000 --> 00:05:28,000 і в Objective-C ми збираємося використовувати ключове слово @ власності, 102 00:05:28,000 --> 00:05:31,000 і це те, що відбувається, щоб визначити властивості, 103 00:05:31,000 --> 00:05:36,000 або не-функцій, які є частиною мого класу. 104 00:05:36,000 --> 00:05:40,000 >> Виклик функції в Objective-C також банани. 105 00:05:40,000 --> 00:05:43,000 Коли ми оголосили функцій в C ми сказали щось на кшталт Int Foo 106 00:05:43,000 --> 00:05:46,000 і відкритої хлопець, а потім дав йому список аргументів. 107 00:05:46,000 --> 00:05:51,000 Це те, що оголосивши методи або функції виглядає в Objective-C. 108 00:05:51,000 --> 00:05:54,000 Якщо я хочу оголосити функцію або метод 109 00:05:54,000 --> 00:05:58,000 де я кажу, що метод дійсно просто функція, яка є членом класу, 110 00:05:58,000 --> 00:06:01,000 так начебто взаємозамінні, але не дуже, 111 00:06:01,000 --> 00:06:03,000 так що усередині мого методу, я хочу створити новий метод. 112 00:06:03,000 --> 00:06:06,000 Він збирається повернутися нічого, так що це буде типу недійсними. 113 00:06:06,000 --> 00:06:08,000 Це повернення типу моя функція. 114 00:06:08,000 --> 00:06:11,000 Тепер у нас є дужки тут, тому що, я не знаю. 115 00:06:11,000 --> 00:06:14,000 Далі буде ім'я моєї функції, 116 00:06:14,000 --> 00:06:17,000 і, нарешті, у нас є крапка з комою, як ми мали в C. 117 00:06:17,000 --> 00:06:19,000 Що нового тут цей хлопець тут. 118 00:06:19,000 --> 00:06:22,000 Це дефіс дійсно необхідно, і що це говорить про те, що 119 00:06:22,000 --> 00:06:26,000 Тут цей метод повинен бути викликаний на екземпляр класу. 120 00:06:26,000 --> 00:06:29,000 >> Після того як ми заявили нашим структурам ми, ймовірно, сказав щось на кшталт: 121 00:06:29,000 --> 00:06:32,000 п структури вузла, і що насправді створені 122 00:06:32,000 --> 00:06:35,000 або примірник одного з цих структур так, щоб я міг фактично почати роботу 123 00:06:35,000 --> 00:06:38,000 з тим, що всередині нього, так що це Прочерк означає, що ми повинні 124 00:06:38,000 --> 00:06:41,000 екземпляр класу, як ми екземплярів, що структура 125 00:06:41,000 --> 00:06:43,000 перш, ніж ми можемо назвати цей метод. 126 00:06:43,000 --> 00:06:46,000 Якщо я хочу, щоб почати додавати аргументи мої методи 127 00:06:46,000 --> 00:06:48,000 це стає ще більше бананів. 128 00:06:48,000 --> 00:06:50,000 Ось моє ім'я методу. 129 00:06:50,000 --> 00:06:53,000 Тоді я буду мати двокрапка, а після цього товстої кишки тут говориться, приходить кілька аргументів. 130 00:06:53,000 --> 00:06:56,000 Цей метод приймає один аргумент. 131 00:06:56,000 --> 00:06:59,000 Типу його аргументу Int, і ім'я цього аргументу 132 00:06:59,000 --> 00:07:03,000 або змінна, яку я збираюся почати використовувати всередині метод називається я. 133 00:07:03,000 --> 00:07:05,000 Знову ж таки, це метод. Вона приймає один аргумент. 134 00:07:05,000 --> 00:07:10,000 >> Якщо ви хочете, щоб почати додавати більше аргументів він отримує більше бананів 135 00:07:10,000 --> 00:07:13,000 У тому, що ми цю товстої кишки, що говорить тут приходить мій список аргументів. 136 00:07:13,000 --> 00:07:15,000 Це перший аргумент є цілим числом. 137 00:07:15,000 --> 00:07:17,000 Тепер це другий аргумент цікаво. 138 00:07:17,000 --> 00:07:20,000 Змінних, що я збираюся використовувати всередині мого функції 139 00:07:20,000 --> 00:07:23,000 називається F, так що усередині мого функції я можу сказати, 140 00:07:23,000 --> 00:07:25,000 F + = 1 або щось. 141 00:07:25,000 --> 00:07:30,000 Ця річ тут в основному ключ для цього аргументу або параметра. 142 00:07:30,000 --> 00:07:34,000 Так само, як у нас було пар ключ-значення, а щось на зразок JSON або асоціативні масиви 143 00:07:34,000 --> 00:07:37,000 Objective-C прийняли рішення сказати, гаразд, просто так, що це дійсно ясно 144 00:07:37,000 --> 00:07:39,000 При виклику методу те, що всі ці параметри 145 00:07:39,000 --> 00:07:41,000 Насправді я збирався назвати їх усіх. 146 00:07:41,000 --> 00:07:45,000 Коли ви викликаєте метод, ви фактично говорите andFloat, 147 00:07:45,000 --> 00:07:47,000 і тоді ви будете проходити його дюйма 148 00:07:47,000 --> 00:07:50,000 >> Цікаво, що ця людина не назвав, але всі інші параметри, 149 00:07:50,000 --> 00:07:53,000 так що якщо у нас був третій аргумент, який я міг сказати andFloat 150 00:07:53,000 --> 00:07:56,000 і ще плавати і так далі. 151 00:07:56,000 --> 00:08:01,000 Коли я називаю ці методи це, звичайно, банани, 152 00:08:01,000 --> 00:08:04,000 так що якщо у мене є об'єкт, і я визначив метод Foo, 153 00:08:04,000 --> 00:08:09,000 і я хочу його називати, а не говорити Foo відкрити / закрити дужки 154 00:08:09,000 --> 00:08:11,000 Я збираюся відкрити дужки. 155 00:08:11,000 --> 00:08:13,000 Ось ім'я мого методу. 156 00:08:13,000 --> 00:08:17,000 Я збираюся закрити дужку, і це є предметом Я дзвоню його. 157 00:08:17,000 --> 00:08:20,000 Пам'ятайте, що всі ці методи існують всередині класів 158 00:08:20,000 --> 00:08:23,000 тому що класи можуть мати методи, визначені всередині них. 159 00:08:23,000 --> 00:08:26,000 >> Тут я довільно створений об'єкт деякого класу, 160 00:08:26,000 --> 00:08:28,000 і це синтаксис для цього. 161 00:08:28,000 --> 00:08:31,000 Є 2 кроків для створення об'єкта. 162 00:08:31,000 --> 00:08:34,000 В першу чергу сказати, що я хочу виділити простір. 163 00:08:34,000 --> 00:08:37,000 Це еквівалентно Танос. Ми не повинні говорити Танос більше. 164 00:08:37,000 --> 00:08:42,000 Ми кинули м, зробили його ідентифікатор, і замінив. З с. Метрів. 165 00:08:42,000 --> 00:08:47,000 Після того як ми Alloc те, що ми тоді повинні ініціалізувати його. 166 00:08:47,000 --> 00:08:49,000 В основному, коли ви створюєте об'єкти, які ви, можливо, захочете мати деяку логіку 167 00:08:49,000 --> 00:08:53,000 , Який виконується, коли вони створені, так що ви можете передати деякі значення за замовчуванням 168 00:08:53,000 --> 00:08:57,000 або щось подібне до цього, і тому цей метод ініціалізації є те, що насправді створює об'єкт. 169 00:08:57,000 --> 00:08:59,000 Ми спочатку виділити місце, так само, як ми робили це в C, 170 00:08:59,000 --> 00:09:04,000 а потім ми його ініціалізації, яка може або не може зробити дуже багато. 171 00:09:04,000 --> 00:09:07,000 Потім ми повертаємо цю річ в об'єкт, о. 172 00:09:07,000 --> 00:09:09,000 Там є зірка тут, тому що це технічно покажчик, 173 00:09:09,000 --> 00:09:12,000 Але не хвилюйтеся, покажчиків не те, що велика угода в Objective-C більше. 174 00:09:12,000 --> 00:09:15,000 >> Тепер ми екземпляр цього класу називають NSObject, 175 00:09:15,000 --> 00:09:19,000 і це тільки випадковий класу, Яблуко. 176 00:09:19,000 --> 00:09:22,000 Ми примірник цього, і тепер у мене є екземпляр цього класу 177 00:09:22,000 --> 00:09:25,000 У цьому об'єкт О, так це значить, що, якщо я визначив 178 00:09:25,000 --> 00:09:29,000 ці методи я міг би назвати їх, як це. 179 00:09:29,000 --> 00:09:31,000 Точно так само, якщо б я хотів викликати метод з одним аргументом, 180 00:09:31,000 --> 00:09:34,000 таким чином, це бар метод, який приймає один аргумент, 181 00:09:34,000 --> 00:09:38,000 і ось Баз: qux метод, так що це займає від 2 аргументів. 182 00:09:38,000 --> 00:09:44,000 Це виклик однієї функції на цьому об'єкті °. 183 00:09:44,000 --> 00:09:46,000 Сенс? 184 00:09:46,000 --> 00:09:50,000 Синтаксис повинно мати сенс, але ви начебто звикнути до нього. 185 00:09:50,000 --> 00:09:54,000 >> Добре, давайте поговоримо про кілька речей, які вбудовані в Objective-C 186 00:09:54,000 --> 00:09:56,000 , Які не обов'язково вбудовані в C. 187 00:09:56,000 --> 00:09:59,000 У C ми якось мав справу з рядками, як ці дурні масиви символів, 188 00:09:59,000 --> 00:10:01,000 і це стало дійсно дратує. 189 00:10:01,000 --> 00:10:04,000 Objective-C має ті все побудовано у нас, і вона побудована в 190 00:10:04,000 --> 00:10:06,000 за допомогою цього класу називають NSString. 191 00:10:06,000 --> 00:10:10,000 Коли я хочу створити NSString у нас є більш таємний синтаксис. 192 00:10:10,000 --> 00:10:15,000 Замість того, щоб говорити "CS50», ми говоримо @ "CS50" 193 00:10:15,000 --> 00:10:17,000 і це тільки синтаксис для оголошення рядки в Objective-C. 194 00:10:17,000 --> 00:10:21,000 Це дуже легко забути, так не роблять. 195 00:10:21,000 --> 00:10:24,000 Тепер, коли у мене є, це рядок, але помітив 196 00:10:24,000 --> 00:10:26,000 це дійсно тільки об'єкт. 197 00:10:26,000 --> 00:10:30,000 Я сказав NSString, який означає, що я екземпляр класу 198 00:10:30,000 --> 00:10:32,000 називається NSString, який написав хтось інший для мене, 199 00:10:32,000 --> 00:10:35,000 і вони були дуже хороші про це, і тому зараз 200 00:10:35,000 --> 00:10:37,000 Я можу почати називати його методи. 201 00:10:37,000 --> 00:10:40,000 Якщо я називаю методом Довжина цього об'єкта з 202 00:10:40,000 --> 00:10:43,000 він збирається повернутися до мене довжину рядка. 203 00:10:43,000 --> 00:10:45,000 Це так само, як в StrLen C. 204 00:10:45,000 --> 00:10:47,000 Це буде означати, 4. 205 00:10:47,000 --> 00:10:51,000 >> Точно так само, іншого способу я б хотів, щоб піклуватися про це characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Це метод, який говорить на цю рядок з 207 00:10:54,000 --> 00:10:57,000 Я хочу, щоб ви нульовому характер, 208 00:10:57,000 --> 00:10:59,000 і так це було б повернутися до мене з характером, 209 00:10:59,000 --> 00:11:02,000 і є ціла купа більше з цих методів, які ви можете Google дуже легко. 210 00:11:02,000 --> 00:11:07,000 Документації Apple, є великим, і ми поглянемо на це трохи пізніше. 211 00:11:07,000 --> 00:11:09,000 Ті рядки. 212 00:11:09,000 --> 00:11:11,000 Ми також масиви змінної розмір вбудованого 213 00:11:11,000 --> 00:11:13,000 Пам'ятаєте, як в C, коли ми оголосили масив 214 00:11:13,000 --> 00:11:16,000 Ми були у вас є 5 елементів, кінець історії. 215 00:11:16,000 --> 00:11:18,000 Коли ми дісталися до JavaScript і PHP ми могли б почати 216 00:11:18,000 --> 00:11:20,000 робити речі, як додавання елементів або переміщенні елементів. 217 00:11:20,000 --> 00:11:22,000 Ми можемо зробити те ж саме в Objective-C. 218 00:11:22,000 --> 00:11:26,000 Замість того, щоб створити масив у звичайному режимі C 219 00:11:26,000 --> 00:11:30,000 ми знову інший клас NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 Там також NSArray, 221 00:11:33,000 --> 00:11:35,000 і це буде в основному інкапсуляції деяких масивів. 222 00:11:35,000 --> 00:11:38,000 Це говорить перше, що я хочу зробити, це я хочу виділити 223 00:11:38,000 --> 00:11:41,000 місце для нового масиву, і після того як я передати його 224 00:11:41,000 --> 00:11:43,000 Я тоді потрібно ініціалізувати його. 225 00:11:43,000 --> 00:11:45,000 Знову ж таки, просто називаючи ці 2 способи. 226 00:11:45,000 --> 00:11:48,000 Тепер це означає, що всередині цього об'єкту 227 00:11:48,000 --> 00:11:50,000 Я порожній масив сидить. 228 00:11:50,000 --> 00:11:54,000 Якщо я хочу щось додати до цього масиву, я можу назвати AddObject метод. 229 00:11:54,000 --> 00:11:59,000 Я хочу додати об'єкт в масив, і я хочу, щоб додати рядок CS50. 230 00:11:59,000 --> 00:12:02,000 Якби я хотів, навпаки, видалити, що я можу сказати, що я хочу 231 00:12:02,000 --> 00:12:09,000 видалити об'єкт на першому місці на масив або об'єкт. 232 00:12:09,000 --> 00:12:11,000 >> Сенс? 233 00:12:11,000 --> 00:12:14,000 Добре, ви начебто звикнути до цієї площі річ кронштейн. 234 00:12:14,000 --> 00:12:18,000 До речі, всередині багато бібліотек Apple, ви побачите, що це NS. 235 00:12:18,000 --> 00:12:21,000 NS насправді позначає наступний крок, який був одним із Стіва Джобса компаній-перше, 236 00:12:21,000 --> 00:12:24,000 а от де він справді почав писати багато коду 237 00:12:24,000 --> 00:12:27,000 як свого роду основу для Mac OS X і всі інші речі, 238 00:12:27,000 --> 00:12:32,000 і тому ця NS є своєрідною це хороше спадщина кричати на одній з ранніх компанії 239 00:12:32,000 --> 00:12:34,000 тому, коли Apple, вперше початківців. 240 00:12:34,000 --> 00:12:36,000 Це у всьому світі. 241 00:12:36,000 --> 00:12:41,000 Давайте поглянемо на більш цілісний Objective-C прикладу. 242 00:12:41,000 --> 00:12:44,000 Ось я всередині XCode. 243 00:12:44,000 --> 00:12:47,000 Щоб потрапити сюди, я спочатку скачав XCode з App Store, 244 00:12:47,000 --> 00:12:50,000 відкрив його, а потім я пішов сюди, щоб файл, 245 00:12:50,000 --> 00:12:54,000 тут нові, а потім проект. 246 00:12:54,000 --> 00:12:57,000 Після я роблю, що я всі ці варіанти того, що я хочу створити, 247 00:12:57,000 --> 00:12:59,000 і тому ми поглянемо на ці параметри пізніше, 248 00:12:59,000 --> 00:13:03,000 але тільки на цьому прикладі, тому що ми насправді не матиме додаток тим не менш, 249 00:13:03,000 --> 00:13:06,000 Я прийшов сюди, і я сказав: інструмент командного рядка, 250 00:13:06,000 --> 00:13:09,000 і це додаток, який я міг би запустити в командному рядку 251 00:13:09,000 --> 00:13:12,000 так само, як ми вже працює з C. 252 00:13:12,000 --> 00:13:16,000 Ось як я створив цей проект, і тому зараз я тут, 253 00:13:16,000 --> 00:13:20,000 так що давайте спочатку подивимося на цей файл, і це має виглядати досить знайомою. 254 00:13:20,000 --> 00:13:24,000 У мене є ім'я Int. Там мій друг агдс, мій інший приятель ARGV. 255 00:13:24,000 --> 00:13:30,000 І таким чином ми бачимо, що це є відправною точкою для мого першого Objective-C додатків. 256 00:13:30,000 --> 00:13:32,000 Тут ми можемо ігнорувати це зараз. 257 00:13:32,000 --> 00:13:35,000 Це, в основному деякі речі керування пам'яттю, що ви не дуже 258 00:13:35,000 --> 00:13:37,000 ніколи не доведеться турбуватися. 259 00:13:37,000 --> 00:13:39,000 >> Давайте подивимося на цю Перший блок тут. 260 00:13:39,000 --> 00:13:46,000 Це перша лінія, якщо я скажу, студентська * Аліса = [[Студентські ідентифікатор] Init] Що це робиш? 261 00:13:46,000 --> 00:13:50,000 Це перший студент тут, це, ймовірно, класу. 262 00:13:50,000 --> 00:13:54,000 Це не клас, Apple, пише, але це клас, який я написав. 263 00:13:54,000 --> 00:13:57,000 Перше, що я хочу зробити, це я хочу виділити місце для нових студентів, 264 00:13:57,000 --> 00:14:00,000 і тоді я хочу, щоб підготувати його, так що це дає мені назад 265 00:14:00,000 --> 00:14:05,000 цей новий об'єкт студент, і я зберігаю це в змінну з ім'ям Аліса. 266 00:14:05,000 --> 00:14:07,000 Звідки це клас прийшов? 267 00:14:07,000 --> 00:14:12,000 Ну, тут на лівій стороні всі ці різні файли всередині мого проекту. 268 00:14:12,000 --> 00:14:16,000 Ми бачимо тут в мене є Student.h і Student.m. 269 00:14:16,000 --> 00:14:20,000 . Ч файлу, пам'ятаю, де я заявляю, всі речі, 270 00:14:20,000 --> 00:14:22,000 , Які будуть існувати в межах класу. 271 00:14:22,000 --> 00:14:25,000 >> Давайте подивимося на це. 272 00:14:25,000 --> 00:14:29,000 Гаразд, тут ми маємо цю @ інтерфейс, і це говорить про те, що тут відбувається 273 00:14:29,000 --> 00:14:33,000 деклараціях все, що буде існувати в моєму класі. 274 00:14:33,000 --> 00:14:36,000 Тоді у мене товстої кишки. Тоді у мене є ця річ NSObject. 275 00:14:36,000 --> 00:14:40,000 Це двокрапка означає, що спадок трохи ми обговорювали трохи раніше. 276 00:14:40,000 --> 00:14:43,000 Це говорить, що все NSObject може зробити 277 00:14:43,000 --> 00:14:46,000 де NSObject це клас, написаний кимось іншим, 278 00:14:46,000 --> 00:14:50,000 все це можна зробити NSObject Я хочу бути в змозі зробити це. 279 00:14:50,000 --> 00:14:54,000 За сказавши: NSObject, що означає, що я в принципі 280 00:14:54,000 --> 00:14:58,000 успадкувала всі функції іншого класу. 281 00:14:58,000 --> 00:15:02,000 Це дійсно дав мені цілу купу різних методів і властивостей, які я можу використовувати. 282 00:15:02,000 --> 00:15:05,000 Тут, внизу я створюю 2 властивості. 283 00:15:05,000 --> 00:15:08,000 Це означає, що мій студент, якби це була структура, це будуть 2 речі 284 00:15:08,000 --> 00:15:11,000 Усередині моєї структурі, так що кожен студент має ім'я 285 00:15:11,000 --> 00:15:14,000 , Що є рядок, і студент також має клас, 286 00:15:14,000 --> 00:15:17,000 яка Int. 287 00:15:17,000 --> 00:15:23,000 >> Нарешті, тут я збираюся створити метод для моїх студентів. 288 00:15:23,000 --> 00:15:26,000 Я подзвонив своєму методу, initWithName, і вона приймає один аргумент, 289 00:15:26,000 --> 00:15:31,000 і цей аргумент є рядком, і я назвав його ім'я. 290 00:15:31,000 --> 00:15:35,000 Тепер давайте подивимося на те, як ми насправді реалізований цього класу. 291 00:15:35,000 --> 00:15:38,000 Ось, тепер я всередині мого. Файл м, 292 00:15:38,000 --> 00:15:40,000 м для реалізації, я думаю. 293 00:15:40,000 --> 00:15:44,000 У мене є реалізація, мій кінець, і ось де я насправді визначенні 294 00:15:44,000 --> 00:15:47,000 initWithName, що робить. 295 00:15:47,000 --> 00:15:50,000 У мене є initWithName, ім'я моє параметра, а потім це 296 00:15:50,000 --> 00:15:53,000 де я насправді створення студентом, 297 00:15:53,000 --> 00:15:56,000 і таким чином, це трохи загадково, але це начебто шаблонний 298 00:15:56,000 --> 00:15:58,000 , Які ви хочете включити в вашу конструкторів. 299 00:15:58,000 --> 00:16:02,000 Ця функція ініціалізації тут, initWithName, є одним з видів конструктора. 300 00:16:02,000 --> 00:16:05,000 Ви в основному будівництво нового об'єкта студента 301 00:16:05,000 --> 00:16:07,000 і, можливо, відправка деяких даних усередині нього. 302 00:16:07,000 --> 00:16:11,000 Перше, що я хочу зробити, це я хочу звернути ініціалізації на це супер річ. 303 00:16:11,000 --> 00:16:15,000 >> Пам'ятайте, що, коли я сказав тому тут, в. Файл ч 304 00:16:15,000 --> 00:16:21,000 що всі NSObject має студент має. 305 00:16:21,000 --> 00:16:24,000 Це означає, що коли я створюю те, що я студент Також потрібно зробити, це 306 00:16:24,000 --> 00:16:28,000 Переконайтеся, що NSObject, що я наследующий все, що дані 307 00:16:28,000 --> 00:16:32,000 Також ініціалізований правильно. 308 00:16:32,000 --> 00:16:36,000 Що я повинен сказати, це супер насправді відбувається послатися на батьківський клас 309 00:16:36,000 --> 00:16:39,000 що я спадкування, тому я хочу, щоб переконатися, що я ініціалізації 310 00:16:39,000 --> 00:16:43,000 все, що я в залежності від перш ніж почати намагатися його використовувати. 311 00:16:43,000 --> 00:16:46,000 Тоді, якщо це правильно инициализирован це, як кажуть, якщо Танос 312 00:16:46,000 --> 00:16:50,000 не повернути нульовий, то я можу почати установку деяких властивостей. 313 00:16:50,000 --> 00:16:54,000 >> У JavaScript і PHP ми це ключове слово називають це, 314 00:16:54,000 --> 00:16:58,000 і це відноситься до поточного екземпляру класу. 315 00:16:58,000 --> 00:17:00,000 У Objective-C ми називаємо це самостійно. 316 00:17:00,000 --> 00:17:04,000 Коли я кажу self.name, що означає, що об'єкт 317 00:17:04,000 --> 00:17:07,000 Я тільки що створив, коли я сказав студент Alloc Init, 318 00:17:07,000 --> 00:17:09,000 що збирається дати мені назад об'єктів. 319 00:17:09,000 --> 00:17:12,000 Це означає, що я хочу задати ім'я цього об'єкта 320 00:17:12,000 --> 00:17:15,000 до того, що я тільки що пройшло дюйма 321 00:17:15,000 --> 00:17:18,000 Як і в C, ми отримуємо доступ до членів з цієї точки, 322 00:17:18,000 --> 00:17:21,000 так self.name говорить, що ім'я студента об'єкта 323 00:17:21,000 --> 00:17:24,000 Тепер буде все, що ви тільки що пройшли дюйма 324 00:17:24,000 --> 00:17:28,000 І ось, нарешті, я можу повернути це так, я насправді отримати щось натомість. 325 00:17:28,000 --> 00:17:30,000 >> Питання? 326 00:17:30,000 --> 00:17:34,000 Гаразд, так це само = супер INIT, 327 00:17:34,000 --> 00:17:37,000 якщо ви не зовсім розумієте спадщини речі не хвилюйтеся. 328 00:17:37,000 --> 00:17:40,000 Просто знайте, що якщо ви хочете зробити свій власний метод ініціалізації просто 329 00:17:40,000 --> 00:17:42,000 зробити це, і ви будете добре йти. 330 00:17:42,000 --> 00:17:44,000 Так. >> [Студент] Що, якщо саме значить? 331 00:17:44,000 --> 00:17:49,000 Це означає, що, коли ми Танос те, що ми завжди перевіряється, якщо вона була рівна нулю, 332 00:17:49,000 --> 00:17:51,000 і якщо вона була нульовою, то ми вийшли. 333 00:17:51,000 --> 00:17:55,000 Це те ж саме, тому що, якщо це повертає нуль, то ми, ймовірно, буде сегменті вина 334 00:17:55,000 --> 00:17:57,000 якщо ми почнемо намагатися маніпулювати ним. 335 00:17:57,000 --> 00:18:01,000 Це наш студент класу. 336 00:18:01,000 --> 00:18:03,000 Це означає, що ми можемо ініціалізувати наші студенти в одному з двох способів. 337 00:18:03,000 --> 00:18:08,000 Якщо я скажу, студент ідентифікатор ініціалізації я не використовую цей спосіб, що я тільки що написав, 338 00:18:08,000 --> 00:18:11,000 і замість цього я можу просто сказати, alice.name, 339 00:18:11,000 --> 00:18:14,000 і тепер я збираюся встановити, що ім'я властивості. 340 00:18:14,000 --> 00:18:17,000 >> Точно так само, якщо я хочу використовувати цей метод initWithName 341 00:18:17,000 --> 00:18:20,000 Я можу просто сказати, ідентифікатор, а потім замість того, щоб говорити ініціалізації 342 00:18:20,000 --> 00:18:24,000 Я буду називати це метод, який я тільки що створили, і я збираюся пройти в Боб. 343 00:18:24,000 --> 00:18:30,000 На даний момент, цей об'єкт Боб має ім'я, що збігається з Бобом. 344 00:18:30,000 --> 00:18:35,000 Гаразд, тут я використовую, що NSMutableArray, що ми дивилися на раніше. 345 00:18:35,000 --> 00:18:38,000 Я виділенні space.Then я ініціалізації нового масиву. 346 00:18:38,000 --> 00:18:40,000 Я збираюся додати 2 речі до нього. 347 00:18:40,000 --> 00:18:43,000 Цей масив в даний час проводить студент об'єктів. 348 00:18:43,000 --> 00:18:46,000 Зверніть увагу, що ніде не я повинен сказати, що це масив студентів. 349 00:18:46,000 --> 00:18:48,000 Я сказав, що це масив, період. 350 00:18:48,000 --> 00:18:50,000 Тоді я можу покласти все, що всередині нього, що я хочу. 351 00:18:50,000 --> 00:18:52,000 Ось у мене є 2 об'єкти. 352 00:18:52,000 --> 00:18:56,000 >> Нарешті, у мене є інший об'єкт тут, це TF. 353 00:18:56,000 --> 00:18:59,000 А тут в TF.h принципі те ж саме. 354 00:18:59,000 --> 00:19:01,000 Я успадкування від NSObject, і, до речі, 355 00:19:01,000 --> 00:19:03,000 При створенні класів все це робиться для вас, 356 00:19:03,000 --> 00:19:06,000 такий шаблонний інтерфейс. 357 00:19:06,000 --> 00:19:08,000 Вона має властивість студентів. 358 00:19:08,000 --> 00:19:15,000 У мене є кілька методів, що тут дійсно не багато, 359 00:19:15,000 --> 00:19:18,000 і так це означає, що після створення цього об'єкта TF 360 00:19:18,000 --> 00:19:23,000 Я можу назвати цей метод класу на це так. 361 00:19:23,000 --> 00:19:26,000 Будь-які питання по Objective-C синтаксис, перш ніж ми починаємо рухатися у кілька 362 00:19:26,000 --> 00:19:30,000 цікаві розробки додатків речі? 363 00:19:30,000 --> 00:19:34,000 >> Отже, давайте насправді зробити iPhone додатки. 364 00:19:34,000 --> 00:19:39,000 Основні класи, які ви будете використовувати у Вашому iPhone додаток називається вид контролерів, 365 00:19:39,000 --> 00:19:42,000 і вид контролера в основному являє собою єдиний екран 366 00:19:42,000 --> 00:19:46,000 Всередині вашого додатки, так що якщо я на музику додаток, наприклад, 367 00:19:46,000 --> 00:19:50,000 один вид контролера може представляти подання, в якому я розглядаю всі пісні на моєму iPhone. 368 00:19:50,000 --> 00:19:53,000 Ще один вид контролера може бути, коли я натискаю пісню і почати грати 369 00:19:53,000 --> 00:19:55,000 або як я бурінні вниз, в художники. 370 00:19:55,000 --> 00:19:59,000 Кожен з цих різних екранах може бути представлене як інший контролер зору, 371 00:19:59,000 --> 00:20:04,000 і вид контролера насправді просто клас, який говорить, як цей екран працює. 372 00:20:04,000 --> 00:20:07,000 Речі всередині контролера уявлення, ми будемо мати властивості, 373 00:20:07,000 --> 00:20:10,000 так що такі речі, як кнопка буде власністю нашої точки зору контролера. 374 00:20:10,000 --> 00:20:13,000 >> Ми також збираємося мати методи, і в основному це обробники подій. 375 00:20:13,000 --> 00:20:16,000 Цей метод говорить, що коли ви натиснете на цю кнопку 376 00:20:16,000 --> 00:20:19,000 Я хочу зробити щось, і, нарешті, знову ж таки, 377 00:20:19,000 --> 00:20:24,000 Ми будемо використовувати це само ключове слово, щоб отримати доступ до поточних екземпляром. 378 00:20:24,000 --> 00:20:29,000 Для побудови інтерфейсів в IOS насправді дуже, дуже легко. 379 00:20:29,000 --> 00:20:32,000 У них це добре перетягування інтерфейс під назвою Interface Builder, 380 00:20:32,000 --> 00:20:37,000 і 2 базові концепції, що провід вашого Objective-C у Interface Builder 381 00:20:37,000 --> 00:20:40,000 є IBOutlet і IBAction. 382 00:20:40,000 --> 00:20:44,000 IBOutlet просто говорить, що якщо ви розкажете властивість, що це кнопка, 383 00:20:44,000 --> 00:20:47,000 і ви хочете підключити його до чогось у Вашому UI, 384 00:20:47,000 --> 00:20:49,000 Ви збираєтеся сказати, що це вихід. 385 00:20:49,000 --> 00:20:51,000 Аналогічно, якщо ви хочете, щоб представляти обробник події 386 00:20:51,000 --> 00:20:54,000 Потім ви збираєтеся сказати, що це дія. 387 00:20:54,000 --> 00:20:57,000 >> Щоб насправді дроту до цього графічного представлення 388 00:20:57,000 --> 00:21:00,000 і ваш код, це дуже, дуже просте. 389 00:21:00,000 --> 00:21:03,000 Якщо ви хочете прикріпити IBOutlet, все що вам потрібно зробити, це ви керуєте миші, 390 00:21:03,000 --> 00:21:05,000 і ми побачимо приклад цього дуже швидко. 391 00:21:05,000 --> 00:21:07,000 Ви керуєте клацніть там, де він говорить View Controller. 392 00:21:07,000 --> 00:21:09,000 Ви збираєтеся перетягнути в інтерфейсі, або, навпаки, 393 00:21:09,000 --> 00:21:13,000 якщо ви хочете підключити обробник події ви збираєтеся перетягнути з інтерфейсу 394 00:21:13,000 --> 00:21:15,000 в іншому напрямку. 395 00:21:15,000 --> 00:21:20,000 Давайте поглянемо на дуже простий приклад IOS. 396 00:21:20,000 --> 00:21:23,000 >> Давайте створимо новий проект. 397 00:21:23,000 --> 00:21:25,000 Я збираюся приїхати сюди, щоб додатки, 398 00:21:25,000 --> 00:21:28,000 і я збираюся натиснути Одна заявка View. 399 00:21:28,000 --> 00:21:31,000 Я збираюся натисніть кнопку Далі. Я дам моїм проектом ім'я. 400 00:21:31,000 --> 00:21:33,000 Я буду називати його Hello. 401 00:21:33,000 --> 00:21:36,000 Цікаво, Apple припускає, що ви створюєте продукт 402 00:21:36,000 --> 00:21:38,000 так що ви можете продати його, і вони можуть робити гроші. 403 00:21:38,000 --> 00:21:41,000 Тут, внизу я збираюся сказати, що це iPhone додаток. 404 00:21:41,000 --> 00:21:44,000 Ви можете створити IPad додаток, або якщо ви хочете створити одне з тих додатків 405 00:21:44,000 --> 00:21:47,000 , Яка підтримує як пристрої, які ви можете зробити це. 406 00:21:47,000 --> 00:21:49,000 Це те, що ви хочете, щоб ваші галочки виглядати. 407 00:21:49,000 --> 00:21:51,000 >> Ви хочете використовувати розкадрування, яку ми побачимо пізніше, 408 00:21:51,000 --> 00:21:54,000 і ви безумовно хочете використовувати автоматичний підрахунок посилань, 409 00:21:54,000 --> 00:21:58,000 , Який є приємною особливістю, яка запобігає Вас від необхідності говорити Танос і безкоштовно. 410 00:21:58,000 --> 00:22:03,000 Якщо ви хочете подзвонити Танос і вільно, я хотів би залишити це перевірено. 411 00:22:03,000 --> 00:22:07,000 Я буду натисніть кнопку Далі, і, нарешті, це буде запитують мене, де я хочу зберегти його. 412 00:22:07,000 --> 00:22:14,000 Я вдарю створити, і тут ми йдемо. 413 00:22:14,000 --> 00:22:16,000 Я створив новий проект. 414 00:22:16,000 --> 00:22:19,000 А тут зліва всі файли, які знаходяться всередині мого проекту, 415 00:22:19,000 --> 00:22:22,000 і зауважив, що я отримав цілу купу, і я навіть не робити нічого. 416 00:22:22,000 --> 00:22:24,000 IOS є великим. 417 00:22:24,000 --> 00:22:27,000 >> Наприклад, ось ця ViewController.h, 418 00:22:27,000 --> 00:22:30,000 це буде представляти мій перший контролер зору, 419 00:22:30,000 --> 00:22:32,000 тому на першому екрані всередині мого додатка. 420 00:22:32,000 --> 00:22:34,000 Тепер ми знаємо, що це говорив. 421 00:22:34,000 --> 00:22:36,000 Ми говоримо, я дзвоню цьому класу ViewController, 422 00:22:36,000 --> 00:22:40,000 і ViewController робить все, що робить UIViewController, 423 00:22:40,000 --> 00:22:43,000 і це, знову ж таки, деяким класом, який писав, що Apple, робить багато корисних речей для нас 424 00:22:43,000 --> 00:22:46,000 хотів відобразити екран. 425 00:22:46,000 --> 00:22:50,000 Ось де я можу фактично почати визначення того, що мій погляд контролер робить, 426 00:22:50,000 --> 00:22:52,000 і виявляється, що я дійсно не потрібно це. 427 00:22:52,000 --> 00:22:55,000 Це шаблонний код, який Apple, дає мені безкоштовно. 428 00:22:55,000 --> 00:22:59,000 Я зробив це потрібно перша лінія, або у мене немає класу, 429 00:22:59,000 --> 00:23:02,000 так що ми можемо позбутися цього і позбутися цього. 430 00:23:02,000 --> 00:23:05,000 Отже, це мій порожній екран. 431 00:23:05,000 --> 00:23:08,000 >> Тепер натисніть на цю MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 і це де вона починається найцікавіше. 433 00:23:11,000 --> 00:23:14,000 Це являє собою перший екран на моє додаток. 434 00:23:14,000 --> 00:23:17,000 Якщо я хочу, щоб додати кнопку в HTML я повинен був створити кнопку тега. 435 00:23:17,000 --> 00:23:20,000 В Android ви повинні створити кнопку тега, 436 00:23:20,000 --> 00:23:23,000 але в IOS, якщо я тільки приїхав сюди в правому нижньому кутку 437 00:23:23,000 --> 00:23:27,000 і якщо я натискаю на це третє тут, де він говорить об'єктів, 438 00:23:27,000 --> 00:23:31,000 і я можу прокрутити вниз, або я можу почати пошуки кнопки. 439 00:23:31,000 --> 00:23:35,000 І подивіться, кнопки, так що якщо я насправді перетягнути прямо там, 440 00:23:35,000 --> 00:23:38,000 Я тільки що додали кнопку, щоб цей екран на моє додаток. 441 00:23:38,000 --> 00:23:41,000 Якщо я хочу змінити текст, я можу двічі клацніть по ньому, 442 00:23:41,000 --> 00:23:47,000 сказати щось заманливо, як "Press Me". 443 00:23:47,000 --> 00:23:51,000 Добре, тепер, якщо я запускаю це додаток, таким чином, ми скомпілювати його, 444 00:23:51,000 --> 00:23:54,000 так, щоб запустити його я натискаю кнопку відтворення в лівому верхньому куті, і є моє додаток. 445 00:23:54,000 --> 00:23:58,000 Я нічого не робив, і я отримав солодкий дивлячись iPhone додаток. 446 00:23:58,000 --> 00:24:01,000 Якщо я хочу, щоб зупинити його, ви можете натиснути кнопку зупинки 447 00:24:01,000 --> 00:24:03,000 тому що це більш весело. 448 00:24:03,000 --> 00:24:07,000 >> Давайте припустимо, що я насправді хочете, щоб щось трапилося, коли я натискаю цю кнопку. 449 00:24:07,000 --> 00:24:09,000 Щоб зробити те, що мені потрібно зробити, це мені потрібно створити 450 00:24:09,000 --> 00:24:13,000 Новий обробник подій або дій. 451 00:24:13,000 --> 00:24:16,000 Це означає, що мені потрібно створити певний метод, який я хочу назвати 452 00:24:16,000 --> 00:24:18,000 коли я натискаю на кнопку, так давайте створимо новий метод. 453 00:24:18,000 --> 00:24:20,000 Я всередині ViewController.h. 454 00:24:20,000 --> 00:24:22,000 Я повинен сказати, що метод існує. 455 00:24:22,000 --> 00:24:26,000 Мені потрібно дефіс спочатку, тому що я збираюся бути викликом цього на вид контролера. 456 00:24:26,000 --> 00:24:28,000 Мені потрібно, щоб дати цьому типу. 457 00:24:28,000 --> 00:24:31,000 Тип цього буде IBAction, що те, що ми бачили раніше. 458 00:24:31,000 --> 00:24:35,000 Це обробник події, так що він збирається повернутися IBAction, 459 00:24:35,000 --> 00:24:38,000 і це натяк на XCode сказати, що 460 00:24:38,000 --> 00:24:40,000 це те, що я хочу, щоб телеграфувати небудь. 461 00:24:40,000 --> 00:24:45,000 Я можу дати йому ім'я, як buttonPressed, крапка з комою. 462 00:24:45,000 --> 00:24:48,000 >> Тепер я оголосив новий метод всередині мого класу. 463 00:24:48,000 --> 00:24:50,000 Я вже говорив цей метод має своє існування. 464 00:24:50,000 --> 00:24:53,000 Тепер давайте вступати в ViewController.m, 465 00:24:53,000 --> 00:24:56,000 і скажемо, що цей метод може зробити. 466 00:24:56,000 --> 00:25:03,000 Якщо я починаю набирати, наприклад, (недійсними) buttonPressed 467 00:25:03,000 --> 00:25:06,000 повідомлення XCode дійсно хороший і autocompletes для мене. 468 00:25:06,000 --> 00:25:09,000 Це дійсно чудово. 469 00:25:09,000 --> 00:25:12,000 Зауважте, що всередині. М. файлу я можу також сказати, порожнеча, 470 00:25:12,000 --> 00:25:15,000 і це тому, що IBAction насправді не тип. 471 00:25:15,000 --> 00:25:19,000 Це насправді хештег визначена десь бути порожнеча, 472 00:25:19,000 --> 00:25:22,000 і знову ж таки, це всього лише натяк на XCode, що говорить 473 00:25:22,000 --> 00:25:25,000 Я хочу, щоб це обробник події, і ми побачимо, чому всього за секунду. 474 00:25:25,000 --> 00:25:28,000 При натисканні цієї кнопки я збираюся зробити щось дратує 475 00:25:28,000 --> 00:25:30,000 хотілося відображення спливаючого вікна. 476 00:25:30,000 --> 00:25:35,000 >> Щоб зробити це, я можу створити новий екземпляр цього класу називають UIAlertView, 477 00:25:35,000 --> 00:25:39,000 і це клас, який Apple, писав, що збирається показувати настирливі спливаючі вікна. 478 00:25:39,000 --> 00:25:43,000 Ми називаємо це спливаюче попередження, а у мене 2 кроки, пам'ятайте, для створення цього об'єкта. 479 00:25:43,000 --> 00:25:46,000 Перше, що мені потрібно зробити, це виділити простір. 480 00:25:46,000 --> 00:25:48,000 Я хочу UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Я хочу, щоб виділити простір. Це мій перший метод. 482 00:25:51,000 --> 00:25:53,000 Мій наступний метод я хочу, щоб ініціалізувати його, 483 00:25:53,000 --> 00:25:58,000 і тому в мене це великий, довгий метод initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Це в основному збирається контролювати те, що це спливаюче вікно говорить. 485 00:26:01,000 --> 00:26:04,000 Назва моєї спливаюче вікно може бути привіт. 486 00:26:04,000 --> 00:26:08,000 Послання це спливаюче вікно може бути "Це IOS". 487 00:26:08,000 --> 00:26:10,000 Делегат річ, я не знаю, що це таке. 488 00:26:10,000 --> 00:26:13,000 Скажімо, це нічого. 489 00:26:13,000 --> 00:26:18,000 Тепер кнопка, яка збирається з'явитися можете сказати щось на кшталт "Це точно", 490 00:26:18,000 --> 00:26:24,000 і я дійсно не хочу ніяких інших кнопок, так що давайте видалити, що і закрийте дужку. 491 00:26:24,000 --> 00:26:27,000 >> Гаразд, я створив додаткове один. Там ми йдемо. 492 00:26:27,000 --> 00:26:30,000 Це, як я можу створити нове спливаюче вікно. 493 00:26:30,000 --> 00:26:35,000 Якщо я хочу насправді показати спливаюче вікно я хочу назвати шоу методом. 494 00:26:35,000 --> 00:26:38,000 Щоб зробити це, я можу сказати, оповіщення та шоу, 495 00:26:38,000 --> 00:26:40,000 і знову, автозаповнення був супер хороший. 496 00:26:40,000 --> 00:26:42,000 Якщо я забув, що це таке, якщо я тільки що ввели в с, 497 00:26:42,000 --> 00:26:45,000 Я можу прокрутити тут, щоб з'ясувати, що це було, 498 00:26:45,000 --> 00:26:48,000 і він фільтрує красиво. 499 00:26:48,000 --> 00:26:52,000 Тепер я створив це нове спливаюче вікно. 500 00:26:52,000 --> 00:26:55,000 Ми повернемося до того, що делегат означає, пізніше, 501 00:26:55,000 --> 00:26:58,000 і тепер я хочу сказати, що я хочу цей метод, щоб бути звільнені 502 00:26:58,000 --> 00:27:01,000 коли я натискаю на кнопку, так що я збираюся повернутися до моєї розкадровки, 503 00:27:01,000 --> 00:27:04,000 і я хочу зараз надаємо цьому IBAction. 504 00:27:04,000 --> 00:27:06,000 Перше, що потрібно зробити, це натиснути на кнопку. 505 00:27:06,000 --> 00:27:08,000 При натисканні на цю кнопку, я хочу щось трапиться. 506 00:27:08,000 --> 00:27:10,000 Я не збираюся утримувати контроль. 507 00:27:10,000 --> 00:27:13,000 Я хочу, щоб перетягнути за допомогою кнопки 508 00:27:13,000 --> 00:27:15,000 більше тут, де він говорить View Controller. 509 00:27:15,000 --> 00:27:17,000 Ми бачимо, що це красиво світиться. 510 00:27:17,000 --> 00:27:22,000 >> Якщо я відпущу з моєї миші тепер у мене є ця спливаюче вікно тут, де у мене є кілька варіантів. 511 00:27:22,000 --> 00:27:24,000 Одним з них є подій, що я можу зареєструватися. 512 00:27:24,000 --> 00:27:28,000 Це всі ті методи, які я оголосив в моєму ч файлу IBActions. 513 00:27:28,000 --> 00:27:31,000 Це, як XCode знає, що повинен з'явитися в цьому списку мало, 514 00:27:31,000 --> 00:27:33,000 так що це всього лише натяк. 515 00:27:33,000 --> 00:27:37,000 Якщо я натискаю на кнопку натиснутою, я зараз зареєстрований обробник подій. 516 00:27:37,000 --> 00:27:41,000 В JavaScript ми повинні були сказати у мене є певний код, який зареєстрований обробник подій. 517 00:27:41,000 --> 00:27:43,000 У Objective-C це було дійсно так просто. 518 00:27:43,000 --> 00:27:46,000 Якщо я запускаю цей раз 519 00:27:46,000 --> 00:27:49,000 Тепер, коли я натискаю на кнопку мій обробник події буде стріляти, 520 00:27:49,000 --> 00:27:51,000 і я збираюся отримати це спливаюче вікно. 521 00:27:51,000 --> 00:27:54,000 Супер, супер просто немає. 522 00:27:54,000 --> 00:27:57,000 >> Якщо ви завжди хочете, щоб побачити всі події, які відбуваються на реєстрацію 523 00:27:57,000 --> 00:28:00,000 на компоненті, якщо я натискаю на цю кнопку 524 00:28:00,000 --> 00:28:02,000 і Я прийшов сюди, щоб права сторона 525 00:28:02,000 --> 00:28:05,000 Спочатку ви можете бачити тут я можу робити речі, як тип кнопки, 526 00:28:05,000 --> 00:28:08,000 так що якщо ви хочете один з тих, кого я або кнопку Додати контакт 527 00:28:08,000 --> 00:28:10,000 або будь-який інший. 528 00:28:10,000 --> 00:28:13,000 Якщо я хочу, щоб побачити всі події, які на цій кнопці 529 00:28:13,000 --> 00:28:16,000 якщо я проробив весь цей шлях сюди, на правій стороні 530 00:28:16,000 --> 00:28:19,000 ми бачимо тут на події У мене є всі ці різні події. 531 00:28:19,000 --> 00:28:23,000 Я можу натиснути на кнопку, коли я відпустив кнопку, коли я двічі натисніть або будь-який інший, 532 00:28:23,000 --> 00:28:26,000 і той, який я тільки що зареєструвався це подія називається Touch Up Inside, 533 00:28:26,000 --> 00:28:29,000 і це говорить про те, що як тільки палець відривається від кнопки 534 00:28:29,000 --> 00:28:32,000 ця подія стане огнем, і це саме те, що тільки що відбулося. 535 00:28:32,000 --> 00:28:36,000 Це свого роду замовчуванням кнопка натиснута події. 536 00:28:36,000 --> 00:28:39,000 >> Будь-які питання досі? 537 00:28:39,000 --> 00:28:43,000 Гаразд, ось як ми можемо почати з'єднувати речі в нашому коді 538 00:28:43,000 --> 00:28:46,000 в речі всередині нашого інтерфейсу. 539 00:28:46,000 --> 00:28:49,000 Пам'ятайте, перше, що ми повинні були зробити, це знайти код, 540 00:28:49,000 --> 00:28:54,000 і тоді ми підключена інтерфейс до коду, 541 00:28:54,000 --> 00:28:57,000 і є наше перше додаток. 542 00:28:57,000 --> 00:29:00,000 Гаразд, це було дійсно здорово, і ми створили цю кнопку. 543 00:29:00,000 --> 00:29:03,000 Що робити, якщо ми не хочемо мати, щоб створити купу властивостей 544 00:29:03,000 --> 00:29:05,000 представляють ці кнопки? 545 00:29:05,000 --> 00:29:08,000 Наприклад, в Tic Tac Toe у мене є 9 кнопок, 546 00:29:08,000 --> 00:29:11,000 і було б супер, супер дратує потрібно перетягнути 9 разів 547 00:29:11,000 --> 00:29:14,000 або якщо я повинен був зробити Tic Tac Toe з 81, а не 9 548 00:29:14,000 --> 00:29:17,000 і мені довелося перетягувати 81 разів, і це кульгавий. 549 00:29:17,000 --> 00:29:20,000 Що ми можемо зробити, а дуже схоже на HTML 550 00:29:20,000 --> 00:29:23,000 коли у нас були такі речі, як ідентифікатори та імена, і ми можемо шукати речі 551 00:29:23,000 --> 00:29:27,000 по їх ID, є аналогічні поняття в IOS називається тегами. 552 00:29:27,000 --> 00:29:31,000 >> Тег це просто унікальний числовий ідентифікатор для компонента. 553 00:29:31,000 --> 00:29:34,000 Якщо я кажу, це не має тега 0, наприклад, 554 00:29:34,000 --> 00:29:38,000 якщо я створюю кнопку і дати йому тег 0, і ми побачимо, як це зробити всього за секунду, 555 00:29:38,000 --> 00:29:41,000 якщо я хочу отримати цю кнопку Я можу просто сказати, що я хочу, щоб викликати 556 00:29:41,000 --> 00:29:45,000 viewWithTag метод об'єкта тут, 557 00:29:45,000 --> 00:29:48,000 self.view, який представляє поточний екран, наприклад. 558 00:29:48,000 --> 00:29:53,000 Якщо я називаю це viewWithTag метод, я збираюся відійти на кнопку з міткою 0. 559 00:29:53,000 --> 00:29:58,000 Давайте поглянемо на це, будівля Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 По-перше, це мої розкадровки. 561 00:30:01,000 --> 00:30:05,000 Я створив ці 10 кнопок інтерфейсу. 562 00:30:05,000 --> 00:30:07,000 Зверніть увагу, що всі вони однакового розміру. 563 00:30:07,000 --> 00:30:11,000 Якщо я натискаю одну з них і я повернуся сюди на цій правій стороні 564 00:30:11,000 --> 00:30:15,000 Ви побачите, я поправив шрифт прямо тут, тому я зробив шрифтом трохи більшого розміру, 565 00:30:15,000 --> 00:30:19,000 але те, що я зробив, я поставив цей тег. 566 00:30:19,000 --> 00:30:23,000 Я сказав, що це не має тег 1, і це верхньому лівому кутку. 567 00:30:23,000 --> 00:30:26,000 >> Тепер, якщо я натискаю іншу кнопку, як ця друга тут, 568 00:30:26,000 --> 00:30:29,000 Зараз ви побачите, що мій тег 2. 569 00:30:29,000 --> 00:30:32,000 Кожна з цих кнопок просто має унікальний тег 570 00:30:32,000 --> 00:30:35,000 і так це пізніше, як я збираюся почати взаємодію 571 00:30:35,000 --> 00:30:38,000 з моїм додатком. 572 00:30:38,000 --> 00:30:40,000 Це все всередині одного контролера уявлення, 573 00:30:40,000 --> 00:30:42,000 але ось те, що у нас є. 574 00:30:42,000 --> 00:30:44,000 У нас є 3 властивості тут. 575 00:30:44,000 --> 00:30:49,000 Перший і останній збираємося представити стан мого ради. 576 00:30:49,000 --> 00:30:53,000 В основному це Перший масив, що представляє де Xs і ОС. 577 00:30:53,000 --> 00:30:57,000 Це інша говорить нам, чия черга. 578 00:30:57,000 --> 00:31:01,000 Ви помітите, що у мене теж є ці речі. 579 00:31:01,000 --> 00:31:05,000 Раніше, коли ми оголосили властивості, які ми дали їм назви і типу. 580 00:31:05,000 --> 00:31:08,000 Ми також можемо дати їм деяку додаткову інформацію тут. 581 00:31:08,000 --> 00:31:11,000 Це перший говорить неатоміческой, і що це говорить 582 00:31:11,000 --> 00:31:16,000 в основному тільки одна річ ніколи не буде намагатися отримати доступ до цієї змінної за один раз. 583 00:31:16,000 --> 00:31:19,000 Ви можете зробити більш складні додатки, які є багато-, 584 00:31:19,000 --> 00:31:22,000 і так ще в Подряпини у нас були різні теми, 585 00:31:22,000 --> 00:31:25,000 і різні спрайт можуть робити різні речі в той же час. 586 00:31:25,000 --> 00:31:29,000 >> Якщо це не так, що вона не все, що ми будемо дивитися на, 587 00:31:29,000 --> 00:31:33,000 якщо ми говоримо неатоміческой це насправді збираються зробити речі трохи швидше. 588 00:31:33,000 --> 00:31:37,000 У нас також є те, що називається призначають, сильні або слабкі. 589 00:31:37,000 --> 00:31:40,000 Це призначити просто говорить, що це стандартний тип. 590 00:31:40,000 --> 00:31:43,000 Це не об'єкт або покажчик, тому що це всього лише логічний, 591 00:31:43,000 --> 00:31:46,000 так BOOL вбудований в Objective-C. 592 00:31:46,000 --> 00:31:49,000 Це говорить не намагайтеся нічого робити фантазії з покажчиками тут. 593 00:31:49,000 --> 00:31:51,000 Це звичайний старий масштабування. 594 00:31:51,000 --> 00:31:54,000 Сильні і слабкі, це слабке говорить, що насправді 595 00:31:54,000 --> 00:31:57,000 Я хочу, щоб це вказує на те, з точки зору управління. 596 00:31:57,000 --> 00:32:00,000 Я не збираюся насправді виділити або ініціалізації цього сам. 597 00:32:00,000 --> 00:32:04,000 Interface Builder, коли я запускаю додаток, буде обробляти все, що ініціалізація. 598 00:32:04,000 --> 00:32:07,000 Якщо я кажу, слабкі, говорить, що хтось буде створення цього. 599 00:32:07,000 --> 00:32:09,000 Якщо я скажу, сильний, це говорить про те, що я збираюся бути один 600 00:32:09,000 --> 00:32:12,000 яка створює цю дошку об'єкта, 601 00:32:12,000 --> 00:32:14,000 і ось у мене є ще кілька методів тут, 602 00:32:14,000 --> 00:32:18,000 Наприклад, дії, коли нова кнопка натиснута гри, 603 00:32:18,000 --> 00:32:20,000 дію, коли будь-який інший натисканні кнопок 604 00:32:20,000 --> 00:32:23,000 і так далі. 605 00:32:23,000 --> 00:32:26,000 >> Ми не будемо вдаватися занадто багато логіки Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 хоча це дуже цікаво, але давайте поглянемо на 607 00:32:30,000 --> 00:32:33,000 деякі з речей, які ми можемо зробити, всередині IOS. 608 00:32:33,000 --> 00:32:35,000 Цей новий метод гри буде звільнений 609 00:32:35,000 --> 00:32:37,000 всякий раз, коли я натискаю кнопку створення нової гри. 610 00:32:37,000 --> 00:32:41,000 Для підключення, що до мене просто приходять до мене розкадровки. 611 00:32:41,000 --> 00:32:43,000 Я натиснув на нову гру. 612 00:32:43,000 --> 00:32:47,000 Якби я прийшов сюди, щоб право Я бачу, що 613 00:32:47,000 --> 00:32:50,000 Touch Up Inside підключений до NewGame метод. 614 00:32:50,000 --> 00:32:53,000 Ось чому це звільнять. 615 00:32:53,000 --> 00:32:56,000 Метод NewGame збирається зробити деякі налаштування. 616 00:32:56,000 --> 00:32:59,000 Це буде сказати, що я хочу, щоб ви ясно державного правління. 617 00:32:59,000 --> 00:33:01,000 Це хороший метод змінні масиви. 618 00:33:01,000 --> 00:33:03,000 Це буде сказати, що це тепер черга X, 619 00:33:03,000 --> 00:33:07,000 і тепер я збираюся скористатися цим viewWithTag річ. 620 00:33:07,000 --> 00:33:11,000 >> Я знаю, що мої кнопки мають теги 1-9, 621 00:33:11,000 --> 00:33:13,000 і це те, що я довільно вибрав. 622 00:33:13,000 --> 00:33:15,000 Якщо я хочу, щоб встановити текст кожної кнопки, щоб бути порожнім 623 00:33:15,000 --> 00:33:17,000 тому що я просто почав нову гру, і я не хочу 624 00:33:17,000 --> 00:33:20,000 Xs або виходи, щоб їх залишили більше я можу це зробити. 625 00:33:20,000 --> 00:33:24,000 Я можу сказати, що я хочу уявлення з тегом, 1, 2, 3, 4 і так далі. 626 00:33:24,000 --> 00:33:27,000 Це буде тягнути іншу кнопку кожен раз. 627 00:33:27,000 --> 00:33:30,000 Тут я збираюся привести його до UIButton. 628 00:33:30,000 --> 00:33:33,000 Так само, як ми могли б кинути на цілі поплавці й навпаки 629 00:33:33,000 --> 00:33:37,000 це говорить про те, що я хочу кинути це UIButton. 630 00:33:37,000 --> 00:33:40,000 Це означає, що типу це буде * UIButton 631 00:33:40,000 --> 00:33:43,000 тому що покажчиків, але не хвилюйтеся, вони не страшні більше. 632 00:33:43,000 --> 00:33:47,000 >> Як тільки у мене ця кнопка я буду називати його метод. 633 00:33:47,000 --> 00:33:50,000 Цей метод називається SetTitle forState, і тому це говорить 634 00:33:50,000 --> 00:33:53,000 Я хочу, щоб встановити текст кнопки, щоб бути порожнім рядком, 635 00:33:53,000 --> 00:33:57,000 і я хочу, щоб це було порожнім рядком, коли вона не натиснута. 636 00:33:57,000 --> 00:34:01,000 Якщо я використовую цей метод, я можу змінити текст кнопки 637 00:34:01,000 --> 00:34:04,000 як тільки хтось б'є його, але ми хочемо сказати, коли кнопка просто сидів там 638 00:34:04,000 --> 00:34:07,000 Я хочу, щоб текст був порожнім. 639 00:34:07,000 --> 00:34:10,000 Нарешті, ми збираємося для ініціалізації мого ради, 640 00:34:10,000 --> 00:34:12,000 і я хочу сказати, що всі в даний час на 0, 641 00:34:12,000 --> 00:34:15,000 так що це члени ради директорів незмінні є змінюваний масив, 642 00:34:15,000 --> 00:34:21,000 що означає, я можу назвати AddObject методом і тільки 0 всередині його. 643 00:34:21,000 --> 00:34:23,000 Ось що відбувається, коли я створюю нову гру. 644 00:34:23,000 --> 00:34:25,000 >> Давайте поглянемо на іншу. 645 00:34:25,000 --> 00:34:28,000 Цей метод тут IBAction, що збирається бути натиснута 646 00:34:28,000 --> 00:34:31,000 кожен раз, коли одна з цих квадратів натиснута. 647 00:34:31,000 --> 00:34:33,000 Тепер у нас є Tic Tac Toe логіка. 648 00:34:33,000 --> 00:34:36,000 Ми з'ясувати, чия черга, 649 00:34:36,000 --> 00:34:39,000 і на основі цього ми або встановити X або O, 650 00:34:39,000 --> 00:34:43,000 але ми помітили, що ми повторно цю ж обробник події 651 00:34:43,000 --> 00:34:45,000 для кожного з цих кнопок. 652 00:34:45,000 --> 00:34:49,000 Це означає, що у мене немає методу для верхньої лівої кнопки, 653 00:34:49,000 --> 00:34:52,000 інший метод для кнопки внизу праворуч, хоча я міг би зробити це. 654 00:34:52,000 --> 00:34:54,000 Що б не бути дійсно гарним дизайном. 655 00:34:54,000 --> 00:34:57,000 Що я роблю тут, я насправді відбувається, щоб визначити 656 00:34:57,000 --> 00:35:00,000 що тег кнопки, яка була натиснута є. 657 00:35:00,000 --> 00:35:04,000 Ви помітите, що ця п'єса метод приймає один аргумент. 658 00:35:04,000 --> 00:35:07,000 Це називається відправником, і те, що відправник знаходиться відправник буде 659 00:35:07,000 --> 00:35:10,000 являють собою саме те, що було прийнято впливу на. 660 00:35:10,000 --> 00:35:15,000 Якщо я натисну кнопку, цього відправника буде, що UIButton 661 00:35:15,000 --> 00:35:18,000 що я насправді натиснута, так що означає, що UIButton 662 00:35:18,000 --> 00:35:20,000 має тег, тому що я створив тегів. 663 00:35:20,000 --> 00:35:23,000 >> Якщо я хочу отримати в теге Я можу просто сказати: 664 00:35:23,000 --> 00:35:26,000 Я хочу, щоб теги відправника, 665 00:35:26,000 --> 00:35:28,000 і знову, я тільки литих його UIButton. 666 00:35:28,000 --> 00:35:32,000 Я знаю, що відправник буде UIButton. 667 00:35:32,000 --> 00:35:34,000 Це не завжди повинні бути UIButton. 668 00:35:34,000 --> 00:35:36,000 Я міг би, наприклад, зареєструвати той же обробник події 669 00:35:36,000 --> 00:35:38,000  один для кнопки, одна для слайдера. 670 00:35:38,000 --> 00:35:40,000 У цьому випадку, я знаю, що вони всі кнопки, так що я збираюся сказати 671 00:35:40,000 --> 00:35:43,000 Я хочу, щоб це кнопка, і тоді я зможу отримати тег, 672 00:35:43,000 --> 00:35:48,000 і з тегом Тепер я знаю, де я перебуваю всередині плати. 673 00:35:48,000 --> 00:35:51,000 Тоді я можу просто встановити або X або O, може перевернути свою чергу, 674 00:35:51,000 --> 00:35:54,000 перевірити, хто виграв, і так далі. 675 00:35:54,000 --> 00:35:59,000 >> Будь-які питання з цього досі? 676 00:35:59,000 --> 00:36:02,000 Отже, весь код, ми розмістили онлайн-ми не хочемо, щоб потрапити в занадто багато 677 00:36:02,000 --> 00:36:06,000 з логіки Toe Tic Tac, але тепер ви можете бачити, що насправді 678 00:36:06,000 --> 00:36:09,000 все, що ми робимо, ми цикл з цього масиву, 679 00:36:09,000 --> 00:36:13,000 тому ми маємо пару циклів тут, і ми просто порівняння, щоб побачити 680 00:36:13,000 --> 00:36:18,000 у нас є матч у всіх рядках, матч у стовпці або що-небудь подібне. 681 00:36:18,000 --> 00:36:21,000 Щоб дійсно запустити це додаток, якщо я натискаю на одну з цих кнопок 682 00:36:21,000 --> 00:36:24,000 що гра метод був звільнений, так, значить, я просто встановіть 683 00:36:24,000 --> 00:36:31,000 Кнопка бути X, так що тепер ця кнопка буде O, і так далі, 684 00:36:31,000 --> 00:36:35,000 і ось як ми починаємо взаємодіяти з одним додатком сторінці. 685 00:36:35,000 --> 00:36:38,000 >> Ми будемо публікувати код, так що не соромтеся, щоб переглянути, що, 686 00:36:38,000 --> 00:36:43,000 Але давайте тепер поговоримо про деяких додатків, які більше, ніж просто одна сторінка. 687 00:36:43,000 --> 00:36:47,000 Настільки ж захоплюючий, як Tic Tac Toe було, багато додатків всередині IOS 688 00:36:47,000 --> 00:36:50,000 є свого роду ці деталізації речей з декількома екранами. 689 00:36:50,000 --> 00:36:54,000 Перша концепція, що ми повинні говорити про протоколи, 690 00:36:54,000 --> 00:36:57,000 і протоколу є просто набором методів 691 00:36:57,000 --> 00:36:59,000 що ви можете обіцяти визначити. 692 00:36:59,000 --> 00:37:02,000 Якщо я створюю новий протокол з 2-ма методами, це перше, 693 00:37:02,000 --> 00:37:05,000 якщо повертаний тип є нікчемним, я назвав його Foo. 694 00:37:05,000 --> 00:37:07,000 Він не приймає аргументів. У мене є інший метод. 695 00:37:07,000 --> 00:37:11,000 Вона повертає Int. Я назвав його барі, і вона приймає один аргумент. 696 00:37:11,000 --> 00:37:14,000 Все це протокол є те, що називається SomeProtocol тут, 697 00:37:14,000 --> 00:37:19,000 це набір речей, які хтось може реалізувати. 698 00:37:19,000 --> 00:37:22,000 Я не всередині цього протоколу сказали, що Foo робить. 699 00:37:22,000 --> 00:37:26,000 Замість цього, я просто кажу, ви могли б визначити Foo, якщо ви хочете. 700 00:37:26,000 --> 00:37:30,000 Якщо я створюю уявлення-контролер або створення класу 701 00:37:30,000 --> 00:37:33,000 Я можу всередині цього класу обіцянку реалізувати 702 00:37:33,000 --> 00:37:40,000 деякі з цих методів, так, наприклад, якщо говорити 703 00:37:40,000 --> 00:37:43,000 це зараз говорить, що я роблю вам обіцянку, що всередині 704 00:37:43,000 --> 00:37:50,000 цього класу контролера зору мені доведеться визначень для обох Foo і бар. 705 00:37:50,000 --> 00:37:52,000 >> Чому це корисно? 706 00:37:52,000 --> 00:37:55,000 Багато компонентів всередині IOS скористатися цим 707 00:37:55,000 --> 00:37:58,000 шаблон проектування називається делегацією, і те, що делегація говорить 708 00:37:58,000 --> 00:38:01,000 є те, що, наприклад, якщо у мене є текстове поле 709 00:38:01,000 --> 00:38:04,000 і є деякі події, які можуть бути зареєстровані в моїй текстове поле, 710 00:38:04,000 --> 00:38:07,000 замість створення окремої події, що я можу зробити, це я можу сказати, 711 00:38:07,000 --> 00:38:10,000 Делегат це текстове поле буде деякий об'єкт. 712 00:38:10,000 --> 00:38:13,000 Коли я кажу, що це делегат тепер, що означає, що 713 00:38:13,000 --> 00:38:16,000 всякий раз, коли деякі події були б звільнені в текстове поле 714 00:38:16,000 --> 00:38:18,000 замість того, щоб зареєструвати його або що-небудь на зразок цього 715 00:38:18,000 --> 00:38:21,000 він просто буде викликати метод делегата. 716 00:38:21,000 --> 00:38:24,000 Наприклад, у моїй текстове поле у ​​мене є метод, коли я натискаю 717 00:38:24,000 --> 00:38:27,000 що зробити кнопку в правому нижньому кутку, 718 00:38:27,000 --> 00:38:30,000 і т.д., а не реєстрацію обробника події, що я можу сказати, 719 00:38:30,000 --> 00:38:34,000 текстове поле, ось це об'єкт, який я хочу, щоб викликати метод 720 00:38:34,000 --> 00:38:37,000 кожен раз, коли хтось натискає кнопку Готово, 721 00:38:37,000 --> 00:38:40,000 і це означає, що цей об'єкт має для здійснення деяких протоколів 722 00:38:40,000 --> 00:38:45,000 говорить, що я обіцяю, щоб визначити, що робити кнопки дії, 723 00:38:45,000 --> 00:38:47,000 тому що, якщо він не визначає, що метод, і ви натисніть Готово, 724 00:38:47,000 --> 00:38:49,000 Потім вона збирається вводити в оману. 725 00:38:49,000 --> 00:38:55,000 >> Давайте подивимося на прикладі. 726 00:38:55,000 --> 00:38:58,000 Тут я просто одне текстове поле, 727 00:38:58,000 --> 00:39:04,000 і однією з властивостей цього текстового поля тут на цьому права частина делегатів. 728 00:39:04,000 --> 00:39:06,000 Це властивість класу. 729 00:39:06,000 --> 00:39:09,000 Що я зробив тут я можу контролювати натиснута, і я потягнув з цього місця тут 730 00:39:09,000 --> 00:39:13,000 на подання-контролер, а тепер говорить делегат це поле 731 00:39:13,000 --> 00:39:18,000 буде подання-контролер. 732 00:39:18,000 --> 00:39:20,000 Це означає, що, коли деякі дії відбуваються, а не реєстрації 733 00:39:20,000 --> 00:39:25,000 окремі обробники подій, я хочу, щоб ви відправити їх на делегат. 734 00:39:25,000 --> 00:39:28,000 Тепер давайте поглянемо на мій погляд контролер. 735 00:39:28,000 --> 00:39:32,000 Усередині. Файл ч я дав обіцянку. 736 00:39:32,000 --> 00:39:36,000 Я обіцяв виконати деякі методи усередині цього протоколу 737 00:39:36,000 --> 00:39:38,000 називається UITextFieldDelegate, і знову, 738 00:39:38,000 --> 00:39:42,000 це лише деякі список деяких речей, які я можу вибрати для реалізації. 739 00:39:42,000 --> 00:39:46,000 >> Якби я приїхав сюди в моїй. М. файлу, я реалізував один із таких методів. 740 00:39:46,000 --> 00:39:49,000 Я назвав його textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 тому що це, як це називається всередині протоколу. 742 00:39:52,000 --> 00:39:57,000 І тепер щоразу, коли я натискаю кнопку Готово всередині цього текстового поля 743 00:39:57,000 --> 00:40:00,000 Це те, що збираюся називати, так що я не зареєструвати обробник подій. 744 00:40:00,000 --> 00:40:03,000 Я підключений делегата, і всякий раз, коли це подія 745 00:40:03,000 --> 00:40:08,000 це метод, який буде викликаний, так що якщо я приходжу сюди, щоб мої розкадровки та запустити його- 746 00:40:08,000 --> 00:40:11,000 Хоча це вантаженні ми можемо бачити, що вона робить. 747 00:40:11,000 --> 00:40:13,000 На моєму екрані у мене є 2 речі. 748 00:40:13,000 --> 00:40:16,000 У мене є текстове поле, і у мене цей ярлик. 749 00:40:16,000 --> 00:40:19,000 Я просто говорю, я хочу, щоб текст цієї мітки 750 00:40:19,000 --> 00:40:23,000 рівним будь-який користувач ввів всередині текстового поля. 751 00:40:23,000 --> 00:40:26,000 У наступному рядку тут просто метод, який я дзвоню 752 00:40:26,000 --> 00:40:29,000 на текстове поле, яке говорить, що я хочу, щоб ви приховати клавіатуру. 753 00:40:29,000 --> 00:40:33,000 Це всього лише довільні метод, який Apple, вибрав. 754 00:40:33,000 --> 00:40:38,000 >> Знову ж таки, перш ніж я нічого не робив, я повинен був зв'язати всі, так що я вперше приїхав сюди. 755 00:40:38,000 --> 00:40:42,000 З точки зору контролера я перетягнути в текстове поле. 756 00:40:42,000 --> 00:40:46,000 Я відпустив, і я бачу тут, що я можу зробити це властивість текстового поля 757 00:40:46,000 --> 00:40:49,000 так як тут, на думку контролера я визначив власності 758 00:40:49,000 --> 00:40:52,000 тобто IBOutlet текстового поля. 759 00:40:52,000 --> 00:40:55,000 Це говорить про те, що я можу підключити цю власність до 760 00:40:55,000 --> 00:40:59,000 в текстовому полі в моїй користувальницького інтерфейсу. 761 00:40:59,000 --> 00:41:03,000 Тепер, коли я натискаю цього я можу почати друкувати. 762 00:41:03,000 --> 00:41:06,000 Тепер, якщо я натисніть кнопку Готово, це буде стріляти 763 00:41:06,000 --> 00:41:08,000 подія, що я можу зараз відповісти. 764 00:41:08,000 --> 00:41:10,000 Ні обробників подій. 765 00:41:10,000 --> 00:41:13,000 Ось як я тільки що відповів на кнопку Готово. 766 00:41:13,000 --> 00:41:15,000 Сенс? 767 00:41:15,000 --> 00:41:20,000 >> Це не шаблон проектування, що-Ви не могли б коли-небудь опинитеся 768 00:41:20,000 --> 00:41:23,000 створення власного протоколу, але точно знаю, що деякі 769 00:41:23,000 --> 00:41:27,000 різних компонентів IOS реєстрації подій по-різному. 770 00:41:27,000 --> 00:41:29,000 Кнопки, наприклад, використовувати ці IBActions. 771 00:41:29,000 --> 00:41:32,000 Текстові поля, з іншого боку, будемо використовувати делегати. 772 00:41:32,000 --> 00:41:36,000 Ми бачимо, і ви можете дивитися все, що всередині документації. 773 00:41:36,000 --> 00:41:41,000 До речі, там насправді тонни матеріалу користувальницький інтерфейс вбудований в IOS для вас, 774 00:41:41,000 --> 00:41:46,000 так, наприклад, так, як я зробив, які говорять, зробив у правому нижньому кутку 775 00:41:46,000 --> 00:41:48,000 Я вибрав в цьому текстовому полі. 776 00:41:48,000 --> 00:41:50,000 Я прийшов сюди. 777 00:41:50,000 --> 00:41:53,000 Я прокручується трохи вниз, щоб повернути ключ, 778 00:41:53,000 --> 00:41:56,000 і я можу насправді зробити це ціла купа речей, наприклад, якщо я хочу сказати, що 779 00:41:56,000 --> 00:42:00,000 екстреного виклику, а я можу це зробити, що зовсім випадково, 780 00:42:00,000 --> 00:42:02,000 і я не знаю, чому є вбудований екстреної служби кнопки, 781 00:42:02,000 --> 00:42:06,000 але ні, він говорить, екстрений виклик в дійсності маленької літери. 782 00:42:06,000 --> 00:42:08,000 Там ви йдете. 783 00:42:08,000 --> 00:42:12,000 >> Виразно вивчити всі ці різні варіанти в IOS. 784 00:42:12,000 --> 00:42:14,000 Будь-які питання по делегати? 785 00:42:14,000 --> 00:42:18,000 Знову ж таки, цікавий шаблон дизайну, що ви повинні бути в курсі. 786 00:42:18,000 --> 00:42:22,000 Гаразд, давай наступний глянемо на таблицю вид. 787 00:42:22,000 --> 00:42:26,000 Таблиці в основному, що список предметів, які на всьому протязі місця в IOS. 788 00:42:26,000 --> 00:42:29,000 Коли ви переглядаєте всі ваші контакти, ви дивитеся на 789 00:42:29,000 --> 00:42:34,000 настройка сторінки, і такий список речей, називається таблиці. 790 00:42:34,000 --> 00:42:37,000 Реалізація таблиці в IOS досить проста. 791 00:42:37,000 --> 00:42:41,000 Замість того класу, який спускається від UIViewController 792 00:42:41,000 --> 00:42:44,000 як ми робили раніше ми просто повинні сказати, а не 793 00:42:44,000 --> 00:42:46,000 всі UIViewController ж я хочу зробити, 794 00:42:46,000 --> 00:42:50,000 Я кажу все UITableViewController ж я хочу зробити, 795 00:42:50,000 --> 00:42:54,000 так що просто додає деякі додаткові речі, які абсолютно для нас зробив. 796 00:42:54,000 --> 00:42:58,000 Нам потрібно зробити дуже мало в основному заповнити прогалини всередині таблиці. 797 00:42:58,000 --> 00:43:02,000 >> Для того, щоб відобразити таблицю мені потрібно відповісти на кілька запитань. 798 00:43:02,000 --> 00:43:06,000 Перше питання, яке мені потрібно відповісти, скільки секцій в таблиці? 799 00:43:06,000 --> 00:43:08,000 Коли ви переглядаєте ваш додаток контакти ви помітите, що це свого роду 800 00:43:08,000 --> 00:43:12,000 організована як, то у вас є сніданок, і у вас є, що трохи на південь заголовку. 801 00:43:12,000 --> 00:43:14,000 Кожен з них називається розділ. 802 00:43:14,000 --> 00:43:16,000 Ви можете або не потрібно це. 803 00:43:16,000 --> 00:43:19,000 Перше, що вам потрібно зробити, це реалізувати метод 804 00:43:19,000 --> 00:43:22,000 називається TableView: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Це просто повертає скільки секцій у вас є, 806 00:43:25,000 --> 00:43:29,000 так що можна сказати, повертати одне якщо у вас є одна велика вистава таблиці. 807 00:43:29,000 --> 00:43:33,000 Наступне питання, яке IOS повинен знати, скільки рядків у вас є? 808 00:43:33,000 --> 00:43:36,000 Наприклад, ви переглядаєте таблиці. 809 00:43:36,000 --> 00:43:39,000 У вас є фіксована кількість пісень, ви дивитеся на або фіксована кількість контактів. 810 00:43:39,000 --> 00:43:41,000 Якщо ви мене, звичайно, не так багато, 811 00:43:41,000 --> 00:43:44,000 і ось як IOS знає, скільки клітин на форумі. 812 00:43:44,000 --> 00:43:46,000 >> Знову ж, це може сказати щось на кшталт повернення 3. 813 00:43:46,000 --> 00:43:49,000 Моя таблиця має 3 ряди. 814 00:43:49,000 --> 00:43:52,000 Нарешті, IOS повинен знати, що кожна клітина виглядає, 815 00:43:52,000 --> 00:43:54,000 Так що це насправді збираюся зробити, це викликати цей метод тут, 816 00:43:54,000 --> 00:43:57,000 це TableView: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 Це буде викликати цей метод на кожну комірку всередині таблиці. 818 00:44:01,000 --> 00:44:03,000 Як це знаю, скільки разів це назвати? 819 00:44:03,000 --> 00:44:06,000 Ну, ви сказали, що всередині кількість рядків у розділі. 820 00:44:06,000 --> 00:44:08,000 Ми будемо називати це на кожній з наших клітин, 821 00:44:08,000 --> 00:44:11,000 і всередині це де ви можете робити речі, як 822 00:44:11,000 --> 00:44:16,000 набір тексту або сказати вам, що це трохи синьою кнопки на правій стороні робить. 823 00:44:16,000 --> 00:44:19,000 Шаблон для отримання цих клітин, ми збираємося використовувати цей метод 824 00:44:19,000 --> 00:44:22,000 називається dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C насправді дуже добре відомі за смішну довжина їх імена методів, 826 00:44:29,000 --> 00:44:32,000 і це дійсно хороша мова приклад. 827 00:44:32,000 --> 00:44:37,000 Що цей метод робить це просто говорить, що я хочу, щоб ти дав мені камеру. 828 00:44:37,000 --> 00:44:39,000 Просто річ IOS. 829 00:44:39,000 --> 00:44:41,000 Якщо у вас є щось подібне 100000 композицій на ставку 830 00:44:41,000 --> 00:44:45,000 IOS, що не хочете зробити, це виділити 100000 клітин, 831 00:44:45,000 --> 00:44:48,000 тому що якщо ви у верхній частині списку, вам дійсно потрібно виділити пам'ять 832 00:44:48,000 --> 00:44:51,000 на осередок, 99000 рядків вниз? 833 00:44:51,000 --> 00:44:55,000 Ні, тому що, як ви прокрутки можна виділити види, як ви йдете вперед. 834 00:44:55,000 --> 00:44:57,000 Це робиться для вас. 835 00:44:57,000 --> 00:44:59,000 Вам не доведеться турбуватися про те, що всі дурні речі продуктивності. 836 00:44:59,000 --> 00:45:02,000 Всі ви говорите, ви викликаєте цей метод dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 і це говорить, добре, якщо вам потрібно, щоб я збираюся створити новий осередок для вас. 838 00:45:06,000 --> 00:45:09,000 >> Але якщо ви в нижній частині таблиці, і ви вже виділив деякі клітини 839 00:45:09,000 --> 00:45:12,000 у верхній частині таблиці, що ви дійсно не знадобляться найближчим часом 840 00:45:12,000 --> 00:45:15,000 Я збираюся дати вам один з тих спині замість виділення нового, 841 00:45:15,000 --> 00:45:17,000 , Так що це хороший заклопотаність продуктивності. 842 00:45:17,000 --> 00:45:21,000 Ви не повинні виділяти клітини самостійно. 843 00:45:21,000 --> 00:45:23,000 Це дасть вам назад в клітку. 844 00:45:23,000 --> 00:45:25,000 Це збирається повернутися до вас осередку об'єкта. 845 00:45:25,000 --> 00:45:28,000 Якщо у вас є клітка об'єкта, ви можете робити речі до нього. 846 00:45:28,000 --> 00:45:32,000 Ви можете встановити текст комірки з цією властивістю називається текстова мітка. 847 00:45:32,000 --> 00:45:36,000 Можна додати, що стрілка на правому або інші випадкові речі 848 00:45:36,000 --> 00:45:41,000 З цим іншим властивістю accessoryType, і так далі і так далі. 849 00:45:41,000 --> 00:45:46,000 >> Давайте поглянемо насправді реалізації таблиці зараз. 850 00:45:46,000 --> 00:45:49,000 Коли я створив цей проект 851 00:45:49,000 --> 00:45:53,000 а не говорити один додаток зору, я насправді прийшли сюди 852 00:45:53,000 --> 00:45:57,000 на майстер-деталь додатків, а так в основному це відповідає пошти додаток 853 00:45:57,000 --> 00:46:01,000 на IPad з таблицею, вид на лівий, а потім вміст праворуч. 854 00:46:01,000 --> 00:46:07,000 На ставку або iPhone це буде відповідати одному уявлення таблиці. 855 00:46:07,000 --> 00:46:10,000 Ось де я отримав свій стартовий код. 856 00:46:10,000 --> 00:46:13,000 >> Давайте спочатку подивимося на аркуші розкадрування. 857 00:46:13,000 --> 00:46:15,000 Все це було зроблено для мене, в основному створена. 858 00:46:15,000 --> 00:46:18,000 Ця панель навігації показав мені, що наприклад клітини можуть виглядати, 859 00:46:18,000 --> 00:46:22,000 і я можу двічі клацніть цим, змінити назву. 860 00:46:22,000 --> 00:46:25,000 Будь-які інші проблеми користувальницького інтерфейсу я можу впоратися там. 861 00:46:25,000 --> 00:46:27,000 В заголовку файлу виглядає дуже просто. 862 00:46:27,000 --> 00:46:30,000 Замість того, кажуть, що це UIViewController ми зараз говоримо, що це 863 00:46:30,000 --> 00:46:35,000 TableViewController, тому ми знаємо, що ми хочемо закликати всіх цих методів таблицю. 864 00:46:35,000 --> 00:46:38,000 Далі я хочу створити властивість, яка збирається представляти 865 00:46:38,000 --> 00:46:40,000 речі в моїй таблиці. 866 00:46:40,000 --> 00:46:43,000 Ця таблиця буде довільно відображати 867 00:46:43,000 --> 00:46:46,000 Список фруктів, і тому мені потрібно створити кілька масивів 868 00:46:46,000 --> 00:46:49,000 , В якій я можу вставити свої плоди. 869 00:46:49,000 --> 00:46:52,000 Усередині мого файлу реалізації Перше, що я хочу зробити 870 00:46:52,000 --> 00:46:55,000 , Я хочу переконатися, що я ініціалізувати цей масив. 871 00:46:55,000 --> 00:46:58,000 >> Я сказав ідентифікатор ініціалізації, створив свій плід масиву, 872 00:46:58,000 --> 00:47:03,000 і я додаю 4 речі до нього, одним з яких є набагато більш спірним, ніж інші 3. 873 00:47:03,000 --> 00:47:06,000 І тепер у мене є масив розміром 4. 874 00:47:06,000 --> 00:47:08,000 Ми струшуючи його в CS50. 875 00:47:08,000 --> 00:47:11,000 Тепер у мене є масив розміром 4. 876 00:47:11,000 --> 00:47:13,000 Тепер я збираюся почати відповідати на ці питання, і насправді, 877 00:47:13,000 --> 00:47:16,000 Коли я створив це додаток все це вже було зроблено для мене. 878 00:47:16,000 --> 00:47:19,000 У мене не було набирати з числа секцій у вигляді таблиці. 879 00:47:19,000 --> 00:47:22,000 Він вже був там, і я заповнюючи прогалини. 880 00:47:22,000 --> 00:47:24,000 Скільки розділів у мене є? 881 00:47:24,000 --> 00:47:26,000 One. Все зроблено. 882 00:47:26,000 --> 00:47:28,000 Скільки рядків у мене є? 883 00:47:28,000 --> 00:47:31,000 Ну, у мене по одному рядку для кожного плоду, так це кількість 884 00:47:31,000 --> 00:47:34,000 є властивістю будь масив, який говорить, наскільки він великий? 885 00:47:34,000 --> 00:47:36,000 Ось скільки рядків у мене є. 886 00:47:36,000 --> 00:47:42,000 Нарешті, я повинен сказати, що ж кожна клітина виглядає? 887 00:47:42,000 --> 00:47:46,000 Я збираюся сказати dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> Знову ж таки, це була вже написана для мене. 889 00:47:48,000 --> 00:47:51,000 Я не повинен був зробити це сам, і я хочу, щоб повернутися 890 00:47:51,000 --> 00:47:54,000 ця клітина в цьому місці. 891 00:47:54,000 --> 00:47:57,000 Пам'ятайте, що ми називаємо цим же методом, на кожну клітину, 892 00:47:57,000 --> 00:48:01,000 і цей аргумент тут, цей аргумент indexPath, 893 00:48:01,000 --> 00:48:03,000 говорить, що рядки я дюйма 894 00:48:03,000 --> 00:48:05,000 Якщо я скажу, indexPath.row тут 895 00:48:05,000 --> 00:48:09,000 це буде 0, то це буде 1, то це буде 2, і це так, я знаю, 896 00:48:09,000 --> 00:48:11,000 що клітина я в даний час відображення. 897 00:48:11,000 --> 00:48:15,000 Я хочу, щоб встановити текст комірки за допомогою цієї властивості textLabel 898 00:48:15,000 --> 00:48:19,000 піти в мою фрукти масив і отримати 899 00:48:19,000 --> 00:48:21,000 об'єкт, відповідний кожному рядку. 900 00:48:21,000 --> 00:48:24,000 Якщо це рядок, я тепер установка 901 00:48:24,000 --> 00:48:28,000 Текст власності в рядок. 902 00:48:28,000 --> 00:48:30,000 Я можу зробити ще одну річ. 903 00:48:30,000 --> 00:48:32,000 Я також можу зареєструвати обробник подій по кожному з клітки, 904 00:48:32,000 --> 00:48:35,000 тому, коли я натискаю кожної з цих клітин 905 00:48:35,000 --> 00:48:39,000 це didSelectRowAtIndexPath, це буде називатися для мене, 906 00:48:39,000 --> 00:48:42,000 так просто, визначивши це, я тепер може обробляти те, що відбувається 907 00:48:42,000 --> 00:48:46,000 При натисканні на осередок, і знову, ми передаємо в якій клітини постукав 908 00:48:46,000 --> 00:48:50,000 так що ми можемо використовувати цю ж обробник події для всіх наших клітин. 909 00:48:50,000 --> 00:48:53,000 >> Знову ж таки, це те, що IOS робить для мене. 910 00:48:53,000 --> 00:48:55,000 Давайте відображення інший дратівливих спливаючих 911 00:48:55,000 --> 00:48:59,000 , Який просто говорить, що ви вибрали те, де щось 912 00:48:59,000 --> 00:49:04,000 буде рядок об'єкта. 913 00:49:04,000 --> 00:49:10,000 Коли я запускаю це, я буду мати це хороший вигляд таблиці 914 00:49:10,000 --> 00:49:14,000 по одному рядку для кожного з цих плодів, і якщо я натисніть на одну 915 00:49:14,000 --> 00:49:16,000 він говорить мені, що сталося. 916 00:49:16,000 --> 00:49:21,000 Сенс? 917 00:49:21,000 --> 00:49:24,000 Давайте побудуємо трохи більше Комплекс додатків, 918 00:49:24,000 --> 00:49:28,000 стільки, скільки ви вибрали натиснувши помідор. 919 00:49:28,000 --> 00:49:31,000 Добре в розкадруванні 920 00:49:31,000 --> 00:49:35,000 воно не тільки допоможе нам екранів дизайн індивідуально, 921 00:49:35,000 --> 00:49:38,000 це також допоможе нам зв'язати воєдино всі наш додаток, 922 00:49:38,000 --> 00:49:42,000 так що остаточне додаток ми будемо Будинок це хороше спортивних новин читач, 923 00:49:42,000 --> 00:49:45,000 і тому він буде мати кілька екранів, і тому я можу насправді являють 924 00:49:45,000 --> 00:49:48,000 кожен з цих декількох екранів на розкадруванні 925 00:49:48,000 --> 00:49:52,000 і я можу зменшити масштаб і побачити моє додаток від високого рівня. 926 00:49:52,000 --> 00:49:55,000 >> Для того, щоб створити новий елемент у моєму розкадровки 927 00:49:55,000 --> 00:49:59,000 це дійсно просто всередині Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Якщо я хочу додати ще один екран для цього, наприклад, 929 00:50:01,000 --> 00:50:06,000 Я спочатку не зменшити масштаб з дрібкою масштабу, що Яблуко любить так багато, 930 00:50:06,000 --> 00:50:09,000 і тут, перш ніж я шукати кнопку 931 00:50:09,000 --> 00:50:12,000 і я перетягнути кнопку 932 00:50:12,000 --> 00:50:15,000 якщо я хочу, щоб створити новий екран я можу насправді просто перетягнути 933 00:50:15,000 --> 00:50:19,000 Весь вигляд контролера, так що якщо я беру це, витягнути його сюди, 934 00:50:19,000 --> 00:50:23,000 Гей, є ще один екран, і тепер за допомогою цього ж файлу розкадровки 935 00:50:23,000 --> 00:50:26,000 Я можу мати всі екрани всередині мого додатки, і я можу зменшити масштаб 936 00:50:26,000 --> 00:50:28,000 і подивитися, як вони взаємодіють. 937 00:50:28,000 --> 00:50:32,000 Вони не будуть взаємодіяти ще немає. 938 00:50:32,000 --> 00:50:36,000 Те, яким чином ці 2 екрану взаємодії є ви визначаєте відносини. 939 00:50:36,000 --> 00:50:39,000 Ви можете сказати, що це в основному екрані, при натисненні на цю кнопку, 940 00:50:39,000 --> 00:50:42,000 Я хочу, щоб ковзати по цьому новому екрану. 941 00:50:42,000 --> 00:50:44,000 Це означає, що існує такий зв'язок між 942 00:50:44,000 --> 00:50:46,000  На першому екрані і на другому екрані. 943 00:50:46,000 --> 00:50:49,000 Вам доведеться в основному стрілку від цієї кнопки на другий екран 944 00:50:49,000 --> 00:50:53,000 говорить, що, коли ви натискаєте на цю кнопку, ось де я хочу піти. 945 00:50:53,000 --> 00:50:57,000 Так само, як ми контролюємо клацнуло, і потягнув для визначення цих точок 946 00:50:57,000 --> 00:51:01,000 Ми збираємося зробити те ж саме для визначення цих segues. 947 00:51:01,000 --> 00:51:05,000 >> Ми побачимо, наприклад, для цього, і перш, ніж ми насправді перехід 948 00:51:05,000 --> 00:51:08,000 з одного дисплея на інший IOS достатньо хороший, щоб викликати цей метод 949 00:51:08,000 --> 00:51:11,000 називається prepareForSegue, і це те, де ми можемо почати 950 00:51:11,000 --> 00:51:14,000 відправка даних з однієї програми в іншу. 951 00:51:14,000 --> 00:51:17,000 У цьому прикладі ми збираємося дивитися на це будуть в основному дозволяють нам 952 00:51:17,000 --> 00:51:20,000 для фільтрації бейсбольних команд на ліги і підрозділів. 953 00:51:20,000 --> 00:51:23,000 Коли я вибираю ліги, наприклад, я хочу переході 954 00:51:23,000 --> 00:51:25,000 до мого наступного екрана, де я можу показати всі підрозділи 955 00:51:25,000 --> 00:51:27,000 У цій лізі або всі різні команди. 956 00:51:27,000 --> 00:51:31,000 Мені потрібно відправити на той екрані те, що команди ви повинні переглядів. 957 00:51:31,000 --> 00:51:35,000 Для цього я збираюся скористатися цим методом тут. 958 00:51:35,000 --> 00:51:39,000 >> Нарешті, просто випадкова точка на IOS. 959 00:51:39,000 --> 00:51:41,000 Якщо ви хочете зберігати дані є те, що називається основними даними, 960 00:51:41,000 --> 00:51:44,000 який насправді вигляд складно працювати. 961 00:51:44,000 --> 00:51:47,000 Ви також можете використовувати SQL для зберігання даних, 962 00:51:47,000 --> 00:51:51,000 який, знову ж таки, добре, але вид на більш складні сторони в роботі, 963 00:51:51,000 --> 00:51:55,000 але IOS також підтримує ці дійсно цікаві речі називаються списки властивостей, 964 00:51:55,000 --> 00:52:00,000 і список властивостей це просто файл, який представляє пар ключ-значення. 965 00:52:00,000 --> 00:52:03,000 Ви визначаєте список ключів, а ви кажете ця клавіша буде масивом. 966 00:52:03,000 --> 00:52:06,000 Цей ключ буде рядок, і в основному все, що ви можете зробити 967 00:52:06,000 --> 00:52:10,000 У JSON ви можете зробити всередині списку властивостей, 968 00:52:10,000 --> 00:52:14,000 і таким чином, це дійсно приємно дозволяє нам працювати з деякими даними. 969 00:52:14,000 --> 00:52:18,000 Наприклад, у мене є ця Teams.plist, що я створив. 970 00:52:18,000 --> 00:52:22,000 Я створив новий файл PLIST, і я можу деталізувати. 971 00:52:22,000 --> 00:52:26,000 Це словник, це словник, ці рядки, 972 00:52:26,000 --> 00:52:30,000 , Так що це хороший графічного представлення документів JSON 973 00:52:30,000 --> 00:52:33,000 або просто набір пар ключ-значення, 974 00:52:33,000 --> 00:52:37,000 і так це дані, які я буду працювати всередині мого додатка. 975 00:52:37,000 --> 00:52:40,000 >> Давайте спочатку йди сюди. У нас є багато інших файлів в даний час. 976 00:52:40,000 --> 00:52:44,000 Але давайте спочатку приїхати сюди на розкадрування. 977 00:52:44,000 --> 00:52:48,000 Розкадровка тут, якщо я можу зменшити масштаб- 978 00:52:48,000 --> 00:52:51,000 Тепер ми можемо бачити, що це потік моє додаток. 979 00:52:51,000 --> 00:52:53,000 Я перший почну на цьому екрані. 980 00:52:53,000 --> 00:52:55,000 Я збираюся перейти до цього екрану, 981 00:52:55,000 --> 00:52:58,000 і я збираюся перейти до цього екрану, і ми бачимо тут, що якщо я як би 982 00:52:58,000 --> 00:53:04,000 перемістити один із цих навколо ми ці стрілки, що йдуть від сих до сих, 983 00:53:04,000 --> 00:53:08,000 і те, як я визначаю, що стрілка була, якщо я збільшу трохи, 984 00:53:08,000 --> 00:53:12,000 і якщо я прийду до цієї точки зору контролера, 985 00:53:12,000 --> 00:53:16,000 і ось клітка, і я хочу сказати, що, коли ви натиснете на осередок 986 00:53:16,000 --> 00:53:18,000 Я хочу, щоб ковзати на інший екран. 987 00:53:18,000 --> 00:53:21,000 Я можу просто утримувати контроль, 988 00:53:21,000 --> 00:53:26,000 прокрутки по трохи, утримуйте контроль, перетягнути цю комірку знову і відпустити. 989 00:53:26,000 --> 00:53:30,000 >> І тут ми говоримо, що той перехід, який ви хочете використовувати? 990 00:53:30,000 --> 00:53:32,000 Ви хочете використовувати цей слайд річ, яка називається поштовх? 991 00:53:32,000 --> 00:53:34,000 Ви хочете, щоб ковзати знизу вгору? 992 00:53:34,000 --> 00:53:36,000 Це називається модальним. 993 00:53:36,000 --> 00:53:40,000 І як тільки я натискаю одну з них, він збирається зробити цю стрілку для мене, 994 00:53:40,000 --> 00:53:44,000 і це означає, що я насправді обробляються, що відбувається, коли я натискаю цю кнопку в графічному вигляді. 995 00:53:44,000 --> 00:53:48,000 Я не писати ніякого коду насправді ковзати від одного екрана до наступного. 996 00:53:48,000 --> 00:53:51,000 Я визначив це візуально всередині Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Якщо я натискаю на цю стрілку, ми бачимо, що Я дав цю річ ім'ям. 998 00:53:55,000 --> 00:53:59,000 Я назвав його showDivisions, і це так, що я можу знати 999 00:53:59,000 --> 00:54:03,000 що перехід може відбутися, і ми побачимо, чому тільки в сек. 1000 00:54:03,000 --> 00:54:06,000 Ось як я підключив різних екранах в моє додаток. 1001 00:54:06,000 --> 00:54:09,000 Якби це була кнопка, наприклад, замість таблиці, 1002 00:54:09,000 --> 00:54:11,000 Я міг контролювати натиснути на кнопку, перетягнути на наступний екран, 1003 00:54:11,000 --> 00:54:16,000 і ось як я можу зробити навігацію таким чином. 1004 00:54:16,000 --> 00:54:19,000 >> Дійсно швидко, якби ми вступили в MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 знову ж таки, ми просто збираємося визначити список речей, 1006 00:54:22,000 --> 00:54:26,000 , Який буде відображатися у вигляді таблиці. 1007 00:54:26,000 --> 00:54:29,000 Тут я говорю, що я хочу, щоб ви, що PLIST файл, 1008 00:54:29,000 --> 00:54:32,000 і я хочу, щоб ви завантажите його в словник, 1009 00:54:32,000 --> 00:54:35,000 і як тільки ви цього словника, я збираюся відповісти на ці ж питання знову. 1010 00:54:35,000 --> 00:54:37,000 Ось ряд розділів. 1011 00:54:37,000 --> 00:54:41,000 Один з них, є по одному рядку для кожної лізі, і текст кожного осередку 1012 00:54:41,000 --> 00:54:46,000 повинні бути або першим, перша ліга, друга ліга, і так далі. 1013 00:54:46,000 --> 00:54:51,000 Нарешті, я збираюся використовувати цей метод, який ми тільки що бачили називається prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 і це метод, який буде звільнений, коли я натискаю 1015 00:54:54,000 --> 00:54:57,000 на одній з цих рядків і, отже, активація, що перехід 1016 00:54:57,000 --> 00:54:59,000 що я створив за допомогою стрілок. 1017 00:54:59,000 --> 00:55:02,000 Це говорить, що в мене може бути кілька 1018 00:55:02,000 --> 00:55:05,000 відносин з одного дисплея на інший. 1019 00:55:05,000 --> 00:55:08,000 Якщо у мене є 2 кнопки і кожну кнопку, Ви потрапите на інший екран 1020 00:55:08,000 --> 00:55:10,000 Я збираюся мати 2 segues, 1 для кожної кнопки. 1021 00:55:10,000 --> 00:55:14,000 Але це prepareForSegue, знову ж таки, буде повторно 1022 00:55:14,000 --> 00:55:17,000 для кожного з різних відносин, так це значить, що мені потрібен спосіб 1023 00:55:17,000 --> 00:55:21,000 виявлення, якщо натиснути першу кнопку або натисканні на другу кнопку. 1024 00:55:21,000 --> 00:55:25,000 >> Пам'ятаєте, коли я дав, що перехід назву, це showDivisions, 1025 00:55:25,000 --> 00:55:29,000 Ось як я тепер знаю, що це перехід, який був активований. 1026 00:55:29,000 --> 00:55:32,000 Все, що я хочу зробити, це я хочу сказати, 1027 00:55:32,000 --> 00:55:35,000 Я хочу з'ясувати, що я тільки що вдарив, 1028 00:55:35,000 --> 00:55:38,000 і так, щоб отримати це, я можу сказати, що я хочу indexPath для обраного рядка, 1029 00:55:38,000 --> 00:55:42,000 пам'ятаю indexPath просто говорить, де я тільки що натиснули, 1030 00:55:42,000 --> 00:55:47,000 і тоді я хочу сказати, що я хочу, щоб з'ясувати, куди я йду. 1031 00:55:47,000 --> 00:55:50,000 Це destinationViewController, це властивість переходити. 1032 00:55:50,000 --> 00:55:53,000 Ось на екрані я збираюся, 1033 00:55:53,000 --> 00:55:56,000 так що я знаю, що на екрані я збираюся називається DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 тому що я створив цей клас, 1035 00:55:59,000 --> 00:56:02,000 І ось тепер, якщо я скажу d.divisions 1036 00:56:02,000 --> 00:56:06,000 Я тепер встановивши властивість уявлення-контролер я збираюся піти. 1037 00:56:06,000 --> 00:56:10,000 Це, як я передача даних з одного дисплея на інший екран. 1038 00:56:10,000 --> 00:56:13,000 >> Просто дивлячись на цю DivisionsViewController 1039 00:56:13,000 --> 00:56:16,000 Ви можете бачити тут, що у файлі. Ч 1040 00:56:16,000 --> 00:56:20,000 Тобто те, що майно підрозділи, і ось що я в основному заповнення, 1041 00:56:20,000 --> 00:56:25,000 так от як я знаю, що я відображенні відповідного підрозділу 1042 00:56:25,000 --> 00:56:28,000 ліги, що я натиснув, і знову, 1043 00:56:28,000 --> 00:56:31,000 фактичний вид таблиця виглядає майже так само, тільки відповідаючи на ці 1044 00:56:31,000 --> 00:56:34,000 3 простих питання, а також виявлення 1045 00:56:34,000 --> 00:56:37,000 що відбувається, коли ви переходите до наступного екрану. 1046 00:56:37,000 --> 00:56:40,000 Ще пару інших речей. 1047 00:56:40,000 --> 00:56:43,000 Ви помітили, у верхній тут, що замість того, щоб говорити # включити 1048 00:56:43,000 --> 00:56:45,000 Я зараз говорю # імпортувати. 1049 00:56:45,000 --> 00:56:47,000 Це тільки Objective-C річ. 1050 00:56:47,000 --> 00:56:52,000 Імпорт в основному краще версії включають в себе, 1051 00:56:52,000 --> 00:56:57,000 і, наприклад, ми повинні знати, що цей клас, 1052 00:56:57,000 --> 00:57:00,000 тому я не можу просто сказати DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Якби ми не хештег standardio.c всередині нашого. Файл з 1054 00:57:05,000 --> 00:57:07,000 компілятор не знав, що Printf було. 1055 00:57:07,000 --> 00:57:12,000 Точно так само, якщо я не імпортувати DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 компілятор насправді не знає, що DivisionsViewController є. 1057 00:57:16,000 --> 00:57:19,000 Просто переконайтеся, що у Вашому різні. Файлів м ви переконаєтеся, що імпорт 1058 00:57:19,000 --> 00:57:25,000 відповідна. ч. файли, так що компілятор не знає, що відбувається. 1059 00:57:25,000 --> 00:57:31,000 >> Нарешті, те, що Apple, в кінцевому рахунку, робить це показати деякі дані за допомогою веб-перегляду, 1060 00:57:31,000 --> 00:57:35,000 і т.д. Ваш погляд об'єкта, в якому Ви можете вставляти 1061 00:57:35,000 --> 00:57:37,000 трохи веб-браузер всередині вашого застосування. 1062 00:57:37,000 --> 00:57:40,000 Все, що вам потрібно зробити, це надати URL вашого веб-браузера, 1063 00:57:40,000 --> 00:57:43,000 так що я хочу піти в mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 і це, як я можу отримати доступ до домашньої сторінки для кожної команди, 1065 00:57:46,000 --> 00:57:49,000 і так, передаючи в цьому URL 1066 00:57:49,000 --> 00:57:52,000 Ваш може відображатися це для мене, і я можу переглядати навколо, 1067 00:57:52,000 --> 00:58:01,000 і тренажер використовується той. 1068 00:58:01,000 --> 00:58:03,000 Тепер це прийшло від моїх PLIST. 1069 00:58:03,000 --> 00:58:07,000 Якщо я натискаю цю цього також прийшли з моїх PLIST, і це ковзання було перевалено 1070 00:58:07,000 --> 00:58:09,000 шляхом визначення тих segues. 1071 00:58:09,000 --> 00:58:12,000 Я натискаю цю і ще одну, 1072 00:58:12,000 --> 00:58:15,000 і тепер ось моя UIWebView, тому просто так 1073 00:58:15,000 --> 00:58:19,000 ось сайт для URL, які я тільки вбудовані, 1074 00:58:19,000 --> 00:58:21,000 і в мене не було, щоб впоратися з чим завгодно з розуму. 1075 00:58:21,000 --> 00:58:24,000 Це, як відображати веб-сторінки. 1076 00:58:24,000 --> 00:58:27,000 Такі речі, як ця кнопку назад тут також дано мені 1077 00:58:27,000 --> 00:58:33,000 абсолютно безкоштовно, тому що я визначив ці відносини використанні segues. 1078 00:58:33,000 --> 00:58:37,000 >> Є питання? Так. 1079 00:58:37,000 --> 00:58:40,000 [Студент] Отже, коли ви використовуєте ідентифікатор, вам ніколи не доведеться нічого безкоштовно? 1080 00:58:40,000 --> 00:58:43,000 Саме, коли ви дзвоните ідентифікатор ініціалізації і вам не доведеться звільнити його. 1081 00:58:43,000 --> 00:58:46,000 IOS буде обробляти все це для вас. 1082 00:58:46,000 --> 00:58:51,000 Це чудово, і ти не порушуючи жодних правил. Так. 1083 00:58:51,000 --> 00:58:54,000 [Студент] Якби ви були, щоб включити більше команд, які можуть поміститися на екрані, 1084 00:58:54,000 --> 00:58:58,000 буде автоматично мати опцію прокручування, або це щось потрібно додати? 1085 00:58:58,000 --> 00:59:01,000 Саме так, якби я мав більше команд, наприклад, він би автоматично обробляти 1086 00:59:01,000 --> 00:59:04,000 прокручування для мене, і всі проблеми продуктивності 1087 00:59:04,000 --> 00:59:08,000 з величезним столом також здійснюється абсолютно для мене. 1088 00:59:08,000 --> 00:59:11,000 >> Інші питання? 1089 00:59:11,000 --> 00:59:13,000 Все це код буде розміщений. 1090 00:59:13,000 --> 00:59:16,000 Ми як би затушовується трохи більше дрібних деталей, 1091 00:59:16,000 --> 00:59:19,000 але речі, як встановити деякі властивості для веб-перегляду 1092 00:59:19,000 --> 00:59:22,000 просто речі, які ви можете отримати, перейшовши за посиланням документації Apple, 1093 00:59:22,000 --> 00:59:24,000 що дійсно, дуже красиво викладені. 1094 00:59:24,000 --> 00:59:27,000 У них є багато зразків додатків і приклад призначення 1095 00:59:27,000 --> 00:59:34,000 різних API, так виразно переглянути їх, якщо можна. 1096 00:59:34,000 --> 00:59:36,000 Просто деякі корисні посилання, які ви, можливо, захочете поглянути на. 1097 00:59:36,000 --> 00:59:38,000 Ось деякі корисні керівництва документації. 1098 00:59:38,000 --> 00:59:41,000 URL-адреси, масивні, так що вони скорочені. 1099 00:59:41,000 --> 00:59:44,000 Це перша є цілої бібліотеки документації. 1100 00:59:44,000 --> 00:59:46,000 Там мало барів пошуку, так що якщо ви починаєте набирати кнопки 1101 00:59:46,000 --> 00:59:50,000 вона почне давати вам всю інформацію про все, що можна зробити з кнопкою. 1102 00:59:50,000 --> 00:59:53,000 Я також включив програмування Table View Guide. 1103 00:59:53,000 --> 00:59:56,000 Він обробляє таблиці представлення в набагато більш докладно, 1104 00:59:56,000 --> 01:00:00,000 як робити такі речі, як динамічно додавати або редагувати клітин клітини або видалити їх. 1105 01:00:00,000 --> 01:00:02,000 >> Там багато зразків додатків від Apple, яка покаже вам, як це зробити, 1106 01:00:02,000 --> 01:00:05,000 І, нарешті, ця остання є Основні принципи обліку людського інтерфейсу, 1107 01:00:05,000 --> 01:00:09,000 і це в основному деякого обговорення компонентів для користувача інтерфейсу, 1108 01:00:09,000 --> 01:00:12,000 такі речі, як не зробити кнопку, що на 4 пікселя на 4 пікселя. 1109 01:00:12,000 --> 01:00:15,000 Це погана ідея, і інші речі, які Яблуко хоче, щоб ви 1110 01:00:15,000 --> 01:00:18,000 заохочення хорошого дизайну. 1111 01:00:18,000 --> 01:00:23,000 >> Будь останніх питань, перш ніж ми закінчимо? 1112 01:00:23,000 --> 01:00:27,000 Гаразд, безумовно, не соромтеся-ми будемо мати спеціальні етикетки на обговорення. 1113 01:00:27,000 --> 01:00:30,000 Ми повинні IOS один, так що безумовно не соромтеся використовувати це. 1114 01:00:30,000 --> 01:00:34,000 Якщо ви хочете працювати зі своїми однокласниками по проектам 1115 01:00:34,000 --> 01:00:37,000 або допомогти з'ясувати деякі випадкові речі IOS 1116 01:00:37,000 --> 01:00:40,000 не соромтеся, напишіть мені, і, безумовно, переглядаємо весь код онлайн, тому що 1117 01:00:40,000 --> 01:00:43,000 тільки в інтересах економії часу ми якось замовчується більше 1118 01:00:43,000 --> 01:00:45,000 тонкозернистий деталі речі. 1119 01:00:45,000 --> 01:00:47,000 Але якщо ні, то удачі у ваших проектах IOS, і я сподіваюся, що у нас є 1120 01:00:47,000 --> 01:00:53,000 великий приплив додатків в App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]