[Powered by Google Translate] [Семинар] [IOS: Писане на приложения като шеф]
[Томи MacWilliam] [Харвардския университет]
[Това е CS50. [CS50.TV]
>> Добре, всички, добре дошли на IOS: Писане Apps като Boss.
Този семинар ще се съсредоточи върху писането на приложения за iPhone
и на свой ред писмено приложения за IPAD, така че ние сме основно ще ходим
няколко различни примери за това как да се направи един апартамент, една проста игра като Tic Tac Toe,
или ако сте по-заинтересовани в един апартамент, като някакъв вид четец на новини
или нещо, което взаимодейства с Интернет, аз ще говоря за това, както и.
Ето нашата кратка програма.
>> IOS приложения са написани на език, наречен Objective-C,
и така че това е малко подобен на C, но всъщност не изобщо,
така че ние ще се говори малко за самия език
и след това как да се изгради iPhone приложения, които използват това приложение програма, наречена Xcode,
които, ако не сте го изтеглили все още се чувстват свободни да започнете изтеглянето.
Това е няколко гигабайта.
Тя трябва да бъде безплатно в App Store, така че ще трябва да има Mac
идеално използвате последната версия на OS X.
Ако не сте, няма проблем.
Имаме Mac-ове в науката център за ваша употреба
с Xcode инсталиран, така че не се колебайте да използвате тези за развитие.
Ако искате да направите един апартамент, но не разполагате с Mac, не се притеснявайте.
Има много на колежа ресурси за това.
И така, след това отиваме да покрие 2-големите примери за различни приложения, които можете да направите.
Objective-C е технически, което се нарича супер набор от C.
Това означава, че всеки код C е валидна и Objective-C код.
Това означава, че ние вид канал, запис на някои допълнителни функции за C.
Някои от тези функции не включват някога да напишем изчистване отново, благодаря на Бога,
не се налага да се притеснявате за тези глупави насоки и ги освобождава и всички тези неща
вас е намразил за C, и това е вид отиде в Objective-C.
>> Сега, Objective-C също така има много по-голяма стандартната библиотека,
така че е много по-голяма функционалност, можете да получите безплатно вътрешността на Objective-C.
Помниш ли, когато бяхме писмено PHP забелязахме, че отидохме
тази малката език гигантската библиотека на всички тези луди неща, които можете да направите.
Същото нещо се случва в IOS.
Има обекти за неща, като календар будистки, и наистина нищо
евентуално може да мисля, че вероятно вече съществува в изпълнение на Objective-C.
Целта част от Objective-C е съотнасяне нещо
Обектно-ориентирано програмиране.
Това е вид на нова концепция, но всъщност сме най-вече научих
много на тези понятия вече.
Идеята Обектно-ориентирано програмиране е, че ти започваш да се структурира
много на кода си около тези неща, наречени класове,
и тези класове са наистина прослави structs.
Вътре на структурата основно казано тук е нещо,
и това нещо може да има членове.
Например, един възел в свързан списък може да има и други неща
като стойност, указател към следващия възел в списъка,
и заедно, че показалеца и тази стойност състои тази инстанция на структурата.
Класовете са много сходни, с изключение на
класове също могат да имат функции вътре в тях.
Когато обяви структура, бихме могли само да кажа, INT N или възел * следващия.
>> Сега с Objective-C, ние всъщност може да постави функции
вътре в тези неща.
Друго нещо, което класове може да направи е, че те могат да наследят данни от други класове.
Например, ние ще се търсят в един куп вградени в Objective-C класа.
Един от тях може да бъде клас, който представлява за екрана,
и така, като казвам, че искат да приложат моето лично мнение
ние основно каже някой в ​​продължение на Apple, вероятно наистина приятни хора,
написал този клас за мен, и дръжки неща като показване на бутоните
или предоставянето на екрана, и ще бъде наистина болезнено
за изпълнение на всичко, което се функционалност и т.н., като просто
наследява данни можем да кажем всичко, което сте направили в този клас
Аз също искам вътре в моя клас, и тогава аз ще да се направят някои други неща,
а именно прилагането на ап.
Ето какво означава тази дума наследство. Ще видим по-конкретен пример.
>> И накрая, ключ с обектно-ориентирано програмиране е, че
това води до данни капсулиране.
В някои на нашия проблем, бихме могли да имаме тези големи, глобални променливи
и глобални навсякъде, и това е как ще следите на държавата.
С класове можем да започнем капсулиране информация в рамките на един обект.
Ако имаме един екран ни приложение, ние не наистина трябва да има някакви данни от
друг екран в нашата ап вътрешността на това,
и така чрез капсулиране на нещата в класове това всъщност води
много по-добър код дизайн, и това е възможно с някои допълнителни възможности
Objective-C.
Предварителен знак, синтаксиса за Objective-C е банани.
То е като нищо не сме виждали преди,
така че е малко на кривата на обучение да се използва за
какво по дяволите означава това?
Но след като се минало, че първоначално кривата на обучение е много, много гладка
да започнете да пишете приложения.
>> Да се ​​обяви един клас, да кажа е моя клас, тя съществува,
и може би тук са някои неща, които аз ще да се определи по-късно,
Отивам да се каже @ интерфейс.
Отивам да се каже @ интерфейс. Отивам да дам моя клас име.
А после някъде другаде Отивам да кажа @ края
и всичко между @ интерфейс и @ края
ще бъде моя клас.
Това ще бъде това, което е вътре в нашите файлове ч.
Точно като в C нашите ч. файлове просто казват тук са някои неща, които ще съществуват.
Аз не съм непременно да ви казвам какво правят все още,
но компилаторът трябва да знае, че те съществуват.
-Късно в рамките на нашата m файлове, защото m за Objective-C
е мястото, където ние всъщност ще се определи това, което правят тези класове.
По подобие на нашите файлове в условие за изпълнение на функциите.
Вътре ни m файл отиваме да се каже тук е това, което всички функции
вътре в моя клас всички те вършат.
И накрая, вътре на структурата може да се каже, в рамките на тези фигурни скоби
INT N или възел * следващия,
и в Objective-C, ние ще използваме ключовата дума @ имот,
и това е какво ще се определят,
или функции, които са част от моите класове.
>> Разговори функции в Objective-C е банани.
Когато ние декларирахме функции в C казахме нещо като INT Foo
и отворена скоба и след това го е дал списък от аргументи.
Това е, което деклариране на методи и функции прилича в Objective-C.
Ако искам да декларират функция или метод
където аз казвам метод е наистина само една функция, която е член на класа,
така вид взаимозаменяеми, но не съвсем,
така в рамките на моя метод Искам да създам нов метод.
Той ще се върне нищо, така че ще бъде от тип невалидни.
Това е типът на връщане на моята функция.
Сега имаме Перънс тук, защото аз не знам.
След това ще бъде името на моята функция,
и най-накрая имаме точка и запетая, като имахме C.
Какво е новото тук е този човек тук.
Това тире всъщност е необходимо, и това казва, че
този метод тук трябва да бъде извикана на инстанция на даден клас.
>> След като ние декларирахме нашите structs вероятно каза нещо като
структура на възли N, и че всъщност е създаден
или инстанция на един от тези structs, така че в действителност може да започне работа
с това, което е вътре в него, така че това тире означава, че ние трябва да
инстанциира клас, точно както инстанция, че структурата на
, преди да можем да наречем този метод върху него.
Ако искам да започнете да добавяте аргументи за моите методи
той получава дори повече банани.
Това е името на моя метод.
Тогава аз ще трябва двоеточие, и след това дебелото черво тя казва, тук идва някои аргументи.
Този метод се приема само един аргумент.
Видът на нейната теза е едно цяло число, както и името на този аргумент
или променлива, че аз отивам да започнете да използвате вътрешността на метода е, че т.нар.
Отново, това е метод. Това отнема един аргумент.
>> Ако искате да започнете да добавяте повече аргументи, той получава повече банани
в това, че ние сме това дебелото черво, което се казва тук идва моя списък от аргументи.
Това първият аргумент е цяло число.
Сега, това Вторият аргумент е интересно.
Променливата, че аз отивам да се използва в рамките на моята функция
се нарича F, така че в рамките на функция ми може да се каже,
F + = 1 или нещо такова.
Това нещо тук е основно ключ за този аргумент или параметър.
Точно като имахме ключови двойки стойност и нещо като JSON или асоциативни масиви
Objective-C е взела решение да се каже, добре, просто така, че е съвсем ясно
когато ти се обадя метод, това, което всички тези параметри са
Всъщност ще да назовем всички тях.
Когато извикате метод, всъщност ще кажа andFloat
и тогава ще го давате.
>> Интересното е, че това не е кръстен, но всички други параметри са,
така че ако имахме 3-ти аргумент мога да кажа, andFloat
и друга плувка и така нататък.
Когато аз наричам тези методи е, разбира се банани,
така че, ако имате обект, и определя метод, наречен Foo
и аз искам да го наричат, вместо да каже Foo Open / Close Перънс
Аз ще отворя една скоба.
Това е името на моя метод.
Отивам да затворите конзолата и това е обект Обаждам го.
Не забравяйте, че всички тези методи съществуват в рамките на класове
защото класове могат да разполагат с методи, определени в тях.
>> Тук съм произволно създали обект на някои клас,
и това е синтаксис за това.
Има две стъпки към създаване на обект.
Първата стъпка е да кажа, че искам да се разпределят пространство.
Това е еквивалентът на изчистване. Ние не трябва повече да се каже, изчистване.
Пусна m, го прави заделянето на памет и заменя в. M.
След като заделянето на памет нещо, ние трябва да го инициализира.
По принцип, когато създавате обекти може да искате да има някаква логика
, който изпълнява, когато те са създадени, така че може да премине в някои стойности по подразбиране
или нещо подобно, така че този първоначален метод е това, което всъщност създава обекта.
Първото разпределяне на пространството, точно както направихме в C,
и после го инициализира, който може или не може да направи много.
Тогава Връщаме това нещо в обект о.
Има звезда тук, защото това е технически указател,
но не се притеснявайте, указатели не са, че вече голяма сделка в Objective-C.
>> Сега сме инстанция на този клас, наречен NSObject
и това е просто случаен клас, който Apple има.
Сме инстанция, и сега имам инстанция на този клас
о в този обект, така че това означава, че ако аз определено
тези методи, които биха могли да ги наречем така.
По същия начин, ако искам да се обадя на метод с един аргумент,
така че това е метод на бара, че приема само един аргумент,
и тук е Баз: qux метод, така че това отнема 2 аргументи.
Това се обажда една функция на този обект о.
Направи ли смисъл?
Синтаксисът може да обясни, но някак си да свикна с него.
>> Добре, нека да говорим за няколко неща, които са вградени в Objective-C
, които не са непременно в C.
В C вид трябваше да се справят със струни, тъй като тези глупави масиви характер,
и го много досадно.
Objective-C има всички построени за нас, и е построена през
използването на този клас, наречен NSString.
Когато искам да се създаде NSString имаме по-тайнствена синтаксис.
Вместо да казва "cs50" ние казваме @ "cs50"
и това е само синтаксиса за обявяване на струните, Objective-C.
Това е изключително лесно да се забрави, така че не.
Сега, след като имам това, това е низ, но забележите
това е наистина само един обект.
Казах NSString, което означава, че инстанция на класа
нарича NSString, която някой друг е написал за мен,
и те бяха много хубаво за него, и така сега
Мога да започна да призовава методи върху нея.
Ако аз наричам метод за дължината на този обект
, че ще се върне за мен дължината на низа.
Това е точно като strlen C.
Това ще се върне 4.
>> По същия начин, друг метод, може да искате да се грижи за тази characterAtIndex.
Това е метод, който казва тази струна е
Искам да получите zeroth характер,
и така това ще се върнат да ми характер в
а има и още цял куп от тези методи, които можете да Google наистина лесно.
Документация на Apple е голям, а ние ще се погледнете, че в малко.
Това са струни.
Ние също така са променливи масиви размер.
Запомни ме C, когато ние декларирахме масив
ние трябваше да кажем, че имате пет елементи, край на историята.
Когато стигнахме до JavaScript и PHP можем да започнем
правене на нещата, като добавянето на елементи или преместването на елементите.
Ние можем да направим същото и в Objective-C.
Вместо да се създаде масив по нормалния начин C
имаме отново друг клас наречен NSMutableArray.
Има също NSArray
и това е всъщност да се оформят някои масив.
Това казва, че първото нещо, което искам да направя е, че искате да разпределите
пространство за нов масив, и след като го разпределят
След това трябва да го инициализира.
Отново призовава тези два метода.
А това означава, че вътре в този обект
Съм празен масив седи там.
Ако искате да добавите нещо към този масив, мога да се обадя на addObject метод.
Искам да добавите обект към масива на, и искам да добавя низ CS50.
Ако исках да премахнете обратно, че мога да кажа, искам да
премахване на обекта на първо място на масив или възразява.
>> Направи ли смисъл?
Добре, някак си да свикне с този площад нещо на конзолата.
Между другото, вътре в много библиотеки на Apple ще видите тази NS.
NS всъщност означава за следващата стъпка, която е един от Стив Джобс първи дружества,
и това е мястото, където той наистина започнах да пиша много на кода
като вид основа за Mac OS X и всички други неща,
и така това NS е на тази хубава наследство вик на един от по-ранните компании
обратно, когато Apple За първи път е началото.
Тя е навсякъде.
Нека хвърлим един поглед към един по-цялостен Objective-C например.
Тук съм вътре в Xcode.
За да получите тук, аз първо се изтегля Xcode от App Store,
отвори го и след това отидох до тук, за да файл,
тук нов, а след това проект.
След като го направя, че имам всички тези варианти на това, което искате да създадете,
и така ние ще разгледаме в тези опции по-късно,
но само за този пример, защото ние не сме в действителност ще има още един апартамент,
Дойдох тук, и аз казах командния ред инструмент,
и това е приложение, което мога да тичам в командния ред
точно както ние сме били от C.
Ето как е създаден този проект, и затова сега съм тук,
така че нека пръв поглед в този файл, и това трябва да изглежда доста запознат.
Имам INT име. Ми е приятел argc, другият ми приятел argv.
И така, можем да видим, че това е входната точка за първото ми Objective-C.
Тук можем да игнорираме това за сега.
Това е основно някои неща, управление на паметта, която не наистина
някога трябва да се притесняваш.
>> Нека погледнем на този първи блок.
Тази първа линия, ако кажа, Студентски * Алиса = [[Student заделянето на памет] Init това, което е, че правиш?
Това първият студент тук, това е може би един клас.
Това не е класа, която Apple пише, но това е класа, която съм написал.
Първото нещо, което искам да направя е, искам да отпусне място за нов ученик,
и след това искам да го инициализира, така че това ми дава обратно
този нов обект студент, и аз съм съхраняване в променлива наречена Алис.
Откъде дойде този клас?
Е, тук от лявата страна, те са от различни файлове вътре в моя проект.
Ние можем да видим тук имам Student.h и Student.m.
З файл, не забравяйте, е мястото, където Декларирам, всички неща,
, които ще съществуват в рамките на класа.
>> Нека хвърлим един поглед на това.
Добре, тук имаме този @ интерфейс, и това казва, че тук идва
декларациите за всичко, което ще съществува в моя клас.
Тогава имам дебелото черво. Тогава имам този NSObject нещо.
Това дебелото черво означава, че наследството малко обсъждахме малко по-рано.
Това казва всичко, което може да направи NSObject
където NSObject е този клас, написана от някой друг,
всичко тази NSObject може да направи Искам да бъда в състояние да направи това.
С, казвайки: NSObject, които означава, че аз основно
наследени от функционалността на друг клас.
Това наистина ми даде цял куп различни методи и свойства, които мога да използвам.
Тук долу съм създаване на две свойства.
Това означава, че мой ученик, ако това беше структурата, те ще са две неща
вътре на моята структура, така че всеки ученик има име
че е низ, и един студент има степен,
което е вътр.
>> И накрая, тук аз отивам да се създаде метод за мой ученик.
Се обадих на моя метод, initWithName и приема само един аргумент,
и този аргумент е низ, и се обадих го наречете.
Сега нека да разгледаме как можем действително осъществени този клас.
Ето, сега съм вътре на моя файл m,
m за изпълнение, предполагам.
Аз имам изпълнението моя край, и тук е мястото, където аз съм всъщност определяне
какво initWithName.
Имам initWithName, името на моя параметър, и след това
е мястото, където аз съм всъщност създаването на един студент,
и така това е малко загадъчно, но това е един вид на стереотипния
, които искате да включите във вашите конструктори.
Тази инициализация функция тук, initWithName, е вид на конструктор.
Вие сте основно изграждане на нов обект студент
а може би и изпращането на някои данни вътре в него.
Първото нещо, което искам да направя е, че искате да се обадите първоначален на този супер нещо.
>> Не забравяйте, че когато казах тук. Файл ч
че всичко NSObject студент има.
Това означава, че ако създам студент, това, което трябва да направите, е
уверете се, че NSObject, че аз съм наследява на тези данни от
се инициализира правилно.
Това, което трябва да ти кажа, това е супер всъщност се случва да се позове на родителския клас
че съм наследява, така че искам да съм сигурен, че се инициализира
всичко, което съм в зависимост от преди да започна да се опитва да го използвате.
Тогава, ако инициализирани правилно, това е просто като да кажеш, ако изчистване
не се върне нула, след това може да започне определянето на някои имоти.
>> В JavaScript и PHP бяхме тази ключова дума, наречена това,
и това се отнася за текущата инстанция на класа.
Objective-C, ние наричаме това самостоятелно.
Когато казвам self.name, това означава, че обектът
Току-що създадох, когато казах, студент заделянето на памет първоначален,
че ще ме върне обект.
Това означава, че искате да зададете име на този обект
какъвто и да е току-що премина.
Точно както в C, достъп до членовете с тази точка,
така self.name казва името на студента обект
сега ще бъде, каквото вие току-що премина.
И най-сетне, мога да го върне, така че аз всъщност се върна нещо.
>> Въпроси?
Добре, така че това самостоятелно = супер първоначален,
ако не напълно разбирам нещата наследство не се притеснявайте.
Просто знам, че ако някога искате да направите своя собствена първоначален метод
направи това, и ще бъде добре да тръгвам.
Да. >> Студентски] Какво означава ако самостоятелно средната?
Това означава, че когато ние изчистване нещо, ние винаги се проверява, ако тя е равна на нула,
и ако е нула, а след това излезе.
Това е едно и също нещо, защото ако това се връща нула, а след това ние сме най-вероятно ще сегмента вина
ако ние започнем да се опитваме да го манипулира.
Това е нашия студент клас.
Това означава, че ние може да се инициализира на нашите ученици в един от двата начина.
Ако кажа, че студент заделянето на памет първоначален аз не съм с този метод, че аз просто пише,
и вместо това може просто да се каже, alice.name,
и сега отивам да зададете, че името на собствеността.
>> По същия начин, ако искам да използвам този метод initWithName
Мога просто да кажа, заделянето на памет, а след това, а не казва INIT
Отивам да се обадя на този метод, че току-що създадохте, и аз отивам да премине в Боб.
В този момент, този обект Боб име, равна на Боб.
Добре, тук съм, че NSMutableArray, които разгледахме по-рано.
Аз разпределяне space.Then съм инициализиране на нов масив.
Отивам да добавите две неща към него.
Този масив сега има студентски обекти.
Забележете, че никъде аз трябва да кажа, това е масив на учениците.
Казах, че е масив, период.
Тогава мога да сложа каквато и да е вътре в него, че искам.
Тук имам две обекти.
>> И накрая, имам друг обект тук, тази TF.
Тук в TF.h в общи линии едно и също нещо.
Съм наследява от NSObject, и от начина, по който
когато създавате класове всичко това е направено за вас,
този вид интерфейс стереотипния.
Тя е собственост на студентите.
Имам няколко методи, че тук наистина не правите и един куп
и така, това означава, че след създам този обект TF
Да се ​​обадя на този метод клас върху него по този начин.
Всички въпроси относно синтаксис Objective-C, преди да започнат да се движат в някои по-
развитието на интересни приложения неща?
>> Добре, така че нека направи iPhone App.
Основните класове, които ще се използват в рамките на iPhone приложението си се наричат ​​гледка контролери,
и изглед контролер най-общо представлява един екран
вътрешността на приложението ви, така че ако аз съм на приложението на музиката, например,
може да представлява един контролер оглед, в който видите всички песни на моя iPhone.
Изглед друг администратор, може да бъде, когато щракнете върху песента и да започнете да го играе
или, както аз съм пробиване на художници.
Всяка от тези различни екрани могат да бъдат представени като контролер различно виждане,
и изглед контролер е наистина само един клас, който казва как работи този екран.
Нещата вътре оглед контролер, отиваме да имат свойства,
така че нещата като един бутон ще бъде собственост на наша гледна точка контролер.
>> Ние сме също така ще разполагат с методи, и те са основно събитие хендлери.
Този метод се казва, че когато натиснете този бутон
Искам да направя нещо, и накрая, отново
отиваме да се използва самостоятелно дума за достъп до текущата инстанция.
За изграждането на интерфейси в IOS всъщност е наистина лесно.
Те имат интерфейс тази хубава влача и капка Interface Builder,
и на две основни концепции, които тел си Objective-C Interface Builder
са IBOutlet и IBAction.
IBOutlet просто казва, че ако Вие декларирате имот, който е един бутон,
и искате да го свържете към нещо в действителност UI,
ти започваш да се каже, това е изход.
Също така, ако искате да представляват манипулатора на събитие
тогава започваш да се каже, това е действие.
>> За да преведете тази графично представяне
и кода си, че е много, много проста.
Ако искате да прикачите IBOutlet, всичко, което трябва да направите, е да контролирате кликване,
и ще видим пример за това наистина бързо.
Вие контролирате щракнете там, където се казва View Controller.
Ти ще плъзне в интерфейса, или обратното,
ако искате да свържете манипулатора на събитие ти започваш да се плъзне от интерфейса
в другата посока.
Нека да погледнем наистина прост пример IOS.
>> Нека създадем нов проект.
Отивам да дойде тук, за да Заявление,
и аз отивам да щракнете върху едно заявление View.
Отивам да щракнете върху следващия. Ще дам име на проекта.
Ще го наречем Здравейте.
Интересното е, че Apple предполага, че създаване на продукт
така че можете да го продават и те могат да правят пари.
Тук аз ще да кажа, че това е iPhone App.
Можете да създадете IPAD приложение, или ако искате да създадете един от тези приложения
, която поддържа двете устройства, които можете да направите това твърде.
Те са това, което искате checkmarks да изглежда.
>> Вие искате да използвате сценарии, които ние ще видим по-късно,
и вие определено искате да използвате автоматично преброяване препратка
което е една хубава черта, която ви пречи да се налага да кажа изчистване и безплатен.
Освен ако не искате да се обадите изчистване и свободно, че ще остави тази регистрирания.
Ще Щракнете върху Next (Напред), и накрая, това ще ме питат къде искам да го спаси.
Ще удари създавате, и да го направим.
Съм създал нов проект.
Тук от ляво са всички файлове, които са вътре в моя проект,
и забележите, че имам един куп, а аз дори не направи нищо.
IOS е страхотно.
>> Например, тук ViewController.h
това ще представлява първият контролер оглед,
така че първо екрана вътре в моя апартамент.
Сега знаем какво казва.
Ние сме Обаждам се да кажа, че този клас ViewController
и ViewController прави всичко, че UIViewController,
и това отново е някакъв клас, който Apple пише, че прави много удобен неща за нас
като изведете екрана.
Тук е мястото, където действително може да започне определянето на това, което според мен контролер,
и се оказва, че аз наистина не се нуждаят от това.
Това е стереотипния код, който Apple ми дава безплатно.
Се нуждаят от този първи ред, или не разполагат с класа,
за да можем да се отървем от това и да се отървете от това.
Добре, така че това ми е празен екран.
>> Сега нека да кликнете върху този MainStoryboard.storyboard,
и това е мястото, където започва да става интересно.
Това представлява първия екран на моя апартамент.
Ако искам да добавите бутон в HTML имах да създадете етикет бутона.
В Android имате да създадете етикет бутона,
но в IOS, ако аз просто дойде тук в долния десен
и ако кликнете върху това 3-то тук, където се казва обекти,
и мога да превъртите надолу, или да започнат да търсят за бутона.
И изглежда, един бутон, така че, ако действително влачите и пускате това право,
Току-що добавя бутон към този екран на моя апартамент.
Ако искате да промените текста, мога да кликнете двукратно върху него,
каже нещо привлекателен като "Me Натиснете".
Добре, сега, ако стартирате това приложение, така че ние да го компилирате,
така да го стартирате натиснете бутона за възпроизвеждане в горния ляв и има моя апартамент.
Не съм направил нищо, и аз имам сладък iPhone App.
Ако искам да го спре, можете да щракнете върху бутона стоп
защото е по-забавно.
>> Да кажем, че аз всъщност искам нещо да се случи, когато натиснете този бутон.
За да направите това, това, което трябва да направите, е трябва да се създаде
нов манипулатора на събитие или действие.
Това означава, че трябва да се създаде някакъв начин, че искам да се нарича
при натискане на бутона, така че нека създадем нов метод.
Аз съм вътрешността на ViewController.h.
Искам да кажа, че съществува.
Имам нужда от тире първо, защото аз отивам да се обади на контролера.
Трябва да се даде този тип.
Типът на това ще бъде нещо, което видяхме по-рано, че IBAction.
Това е манипулатор на събитие, така че ще се върне IBAction,
и това е намек за Xcode да кажа, че
това е нещо, което искате да свържете нещо.
Мога да му се даде име, като buttonPressed, точка и запетая.
>> Сега съм обявен за нов метод вътре в моя клас.
Казах, този метод трябва да съществува.
Сега нека да влезе в ViewController.m,
и нека кажем какво може да направи този метод.
Ако започнете да пишете, например, (недействителни) buttonPressed
известие Xcode е много хубаво и autocompletes за мен.
Това е наистина прекрасно.
Забележете, че вътрешността на m файл Също така мога да кажа, невалидни,
и това е, защото това IBAction всъщност не е тип.
Всъщност hashtag някъде да празнота,
и отново, това е само намек за Xcode, която казва
Искам това да бъде манипулатора на събитие, и ще видим защо само една секунда.
Когато този бутон е натиснат Отивам да направя нещо досадно
като се покаже изскачащ прозорец.
>> Да направя, че да създадете нов екземпляр от този клас, наречен UIAlertView,
и това е клас, който Apple пише, че става за показване на досадни изскачащи прозорци.
Наричаме това изскачащ прозорец сигнал, и аз имам две стъпки, не забравяйте, за създаване на този обект.
Първото нещо, което трябва да направите, е да разпределя пространството.
Искам UIAlertView.
Искам да разпределя пространството. Това е първата ми метод.
Следващата ми метод е, искам да го инициализира,
и така имам този голям, дълъг метод, наречен initWithTitle.
Това е в общи линии ще контролира какво е това изскачащ прозорец.
Заглавието на моята изскачащ прозорец може да бъде здрасти.
Посланието на него, може да бъде "Това е IOS.
Нещо делегат, аз не знам какво е това.
Да кажем, че това е нищо.
Сега бутон, който ще се появи, може да се каже нещо като "Това със сигурност е"
и аз наистина не искам никакви други бутони, така че нека да изтриете и затворете скобата.
>> Добре, ще създаде допълнително. Точно така.
Това е как аз да създадете нов изскачащ прозорец.
Ако искам действително да се покаже изскачащ прозорец, искам да викате метода на шоуто.
За да направите това мога да кажа, сигнал и шоу,
и отново, функция за автоматично довършване беше супер хубаво.
Ако съм забравил какво е това, ако аз просто въведена в S,
Да превъртате тук, за да разбера какво е това,
и филтрира добре.
Сега съм създал този нов изскачащ прозорец.
Ще се върнем какво делегат означава по-късно,
и сега искам да кажа, че искам този метод да бъде уволнен
при натискане на бутон, така че аз ще се върна, за да ми сториборд,
и аз искам да отдават тази IBAction.
Първото нещо, което искате да направите, е да натиснете бутона.
Когато натиснете този бутон, искам нещо да се случи.
Аз няма да се задържи контрол.
Отивам да щракнете и плъзнете от бутона
тук, където се казва View Controller.
Ние можем да видим, че добре светва.
>> Ако пусна с мишката Сега имам него тук, където имам някои опции.
Един от тях е събития, които могат да се регистрират.
Това са всички тези методи, декларирани в моето досие ч IBActions.
Това е така, как Xcode знае какво трябва да се появи в този малък списък,
така че това е само намек.
Ако кликнете върху бутона натиснат, аз съм регистриран манипулатор на събитие.
В JavaScript имахме да кажем, че имам някакъв код, който регистрира манипулатор на събитие.
Objective-C, че е наистина толкова лесно.
Ако аз тичам отново
сега, когато натисна бутона ми манипулатор на събитие се случва на огън,
и аз отивам да се получи това изскачащ прозорец.
Супер, супер проста.
>> Ако някога искате да видите всички събития, които се случват, да бъдат регистрирани
на компонент, ако кликнете върху този бутон
и идвам тук, за да дясната страна
първия можете да видите тук мога да направя неща, като вида на бутона,
така че ако искате един от тези, които или добавки бутона за контакт
или нещо такова.
Ако искам да видя всички събития, които са на този бутон
ако дойда по целия път тук от дясната страна
можем да видим тук на събитията, имам всички тези различни събития.
Да натиснете бутона, когато пусна на бутона, когато двойно почукване или каквото,
и една Току-що регистрирани, е това събитие, наречено Touch отвътре,
и казва, че веднага след като пръста ми идва бутона
това събитие се случва на огън, и това е точно това, какво точно се е случило.
Това е вид по подразбиране натиснат бутона събитие.
>> Всякакви въпроси досега?
Добре, това е как можем да започнем да свържете нещата в нашия код
в нещата вътре в нашия интерфейс.
Спомнете си, първото нещо, което трябваше да направя, бе да се намери кода,
и тогава ние кабелен интерфейс на кода,
и там е нашият първи ап.
Добре, това беше наистина страхотно, и ние създадохме този бутон.
Ами ако ние искаме да има, за да се създаде един куп имоти
представляващи тези бутони?
Например, в Tic Tac Toe имам 9 бутоните,
и че ще бъде супер, супер досадно да трябва да влачите и пускате 9 пъти
или ако аз трябваше да направя Tic Tac Toe с 81, вместо на 9
и аз трябваше да влачите и пускате 81 пъти, и че е куц.
Какво можем да направим, вместо да е много подобен на HTML
, когато имахме неща като документи за самоличност и имена и можем да търсим нещата
от личната си карта, има подобно понятие в IOS, наречени тагове.
>> Етикетът е просто уникален цифров идентификатор за компонент.
Ако кажа, че това има етикет на 0, например,
, ако създам един бутон и даде етикет на 0, и ще видим как да го направя само една секунда,
ако искам да получа този бутон мога просто да кажа, че искам да се обадя
на viewWithTag метод на обект тук,
self.view, което представлява текущия екран, например.
Ако аз наричам, че viewWithTag метод, аз отивам да се дръпне назад бутона с етикет 0.
Нека да погледнем на това от сграда Tic Tac Toe.
Първо, това е сториборд ми.
Съм създал тези 10 UI бутони.
Забележете, всички те са със същия размер.
Ако щракнете върху една от тях и се върна тук по този дясната страна
ще видите коригира шрифта точно тук, така че направих шрифта малко по-голям,
но това, което направих, беше задам този етикет.
Казах, че това има етикет на 1, и това е в горния ляв ъгъл.
>> Сега, ако щракнете върху друг бутон, като този втори тук
сега ще видите, че моят таг е 2.
Всеки един от тези бутони просто има уникален маркер,
и така това е по-късно как съм ще започне взаимодействие
с моя апартамент.
Това е вътрешността на един изглед контролер,
но тук е това, което имаме.
Имаме три свойства.
Първият и последният ще да представляват държавата на моя съвет.
По принцип тази първа е масив, представляващ Xs и Os.
Този другият ни казва, чийто ред е.
Ще забележите, че аз също имам тези неща тук.
Преди, когато ние декларирахме свойства ги даде име и тип.
Можем също така да им се даде някаква допълнителна информация можете да намерите тук.
Това първо казва nonatomic, и какво казва
е основно само едно нещо никога няма да се опитвате да отворите тази променлива в даден момент.
Можете да го направите по-сложни приложения, които са многонишковите
и да се върнем в Scratch имахме различни теми,
и различни спрайтове да правя различни неща по едно и също време.
>> Ако това не е случай, който не е в нещо, което ще се търсят в
ако кажем, nonatomic всъщност се случва да направим нещата малко по-бързо.
Ние също имаме това нещо, наречено възлага, силна или слаба.
Това възложи просто казва, че това е стандартен тип.
Това не е обект или указател, защото това е просто булев
така булев е построен в Objective-C.
Това казва, че не се опитват да направят нещо фантазия с указатели тук.
Това е редовен стар множител.
Силни и слаби, тази слаба казва, че всъщност
Искам това да бъдат насочени към нещо в контролера.
Аз няма да разпределят или първоначален това сам.
Interface Builder, когато стартирате приложението, ще се справят с всичко, което инициализация.
Ако кажа, слаб, че казва, че някой друг ще бъде създаването на този.
Ако кажа, че силен, това се казва, че аз отивам да бъде
това е създаването на този форум обект,
И така, ето тук имам още няколко методи,
например, действие, когато се натисне бутона игра,
за действие в случаите, когато някой от другите бутони са натиснати,
и така нататък.
>> Ние няма да влязат в твърде голяма част от логиката на Tic Tac Toe,
въпреки че това е много вълнуващо, но нека да разгледаме
някои от нещата, които можем да направим вътре в IOS.
Този нов метод на играта ще бъде уволнен
всеки път, когато натиснете на нов бутон игра.
Да свържете това аз просто дойде да ми сториборд.
Аз кликнали върху нова игра.
Ако дойда тук надясно, виждам, че
Докосване Вътре е свързан към newGame метод.
Ето защо това се случва да ме уволнят.
Методът newGame ще направи някакъв набор.
Ще кажа, че искам да изчистите състоянието на борда.
Това е хубава метод за непостоянен масиви.
Това ще да кажа, че сега е ред на X,
и сега отивам да се възползват на този viewWithTag нещо.
>> Знам, че моите бутони имат таговете 1-9,
и това е нещо, което произволно качват.
Ако искам да настроите текста на всеки бутон, за да бъдат празни
защото аз току-що започна нова игра и аз не искам
Xs или операционна система, за да бъдат оставени над мога да направя това.
Мога да кажа искам оглед с етикет, 1, 2, 3, 4 и т.н..
Това ще дръпне различен бутон всеки път.
Тук аз отивам да се хвърли на UIButton.
Точно както бихме могли да хвърлят цели числа да плува и обратно
това казва, че аз искам да хвърлям на UIButton.
Това означава, че от това ще бъде * UIButton
защото на указатели, но не се притеснявайте, те не са страшни вече.
>> След като имам този бутон Отивам да се обадя метод върху него.
Този метод се нарича setTitle forState, така че това казва
Искам да настроите текста на бутона, за да бъде празен низ,
и искам тя да бъде празен низ, когато не е натиснат.
Ако аз съм с този метод, че мога да променя текста на бутона
веднага след като някой го удари, но ние искаме да кажем, когато бутонът е просто седеше там
Искам текста да бъде празен.
И накрая, ние отиваме да се инициализира моя съвет,
и аз ще да кажа, че всичко в момента е на 0,
така че това членовете на борда неизменен е непостоянен масив,
което означава, че може да се обадите на addObject метод и само на 0 вътре в него.
Ето какво се случва, когато създам нова игра.
>> Нека да погледнем в друга.
Този метод тук е IBAction, че ще трябва да се натисне
всеки път, когато един от тези квадратчета е натиснат.
Сега имаме някои Tic Tac Toe логика тук.
Разбера чий ред е,
и на тази база ние или постави X или O,
но ние забелязваме, че сме повторно използване на същата тази манипулатора на събитие
за всеки един от тези бутони.
Това означава, че не разполагат с метод за горния ляв бутон,
различен метод за долния десен бутон, въпреки че бих могъл да направя това.
Това не би наистина да е добър дизайн.
Какво правя тук, е, че всъщност ще определи
етикет на бутон е натиснат.
Забелязвате ли, че тази игра метод приема само един аргумент.
Тя се нарича изпращач, и какво подателя е подател ще
представлява точно това, което е предприето действие при.
Ако натиснете бутон, този подател ще бъде, че UIButton
, че аз всъщност пресовани, така че това означава, че тази UIButton
има етикет, защото съм създал етикет.
>> Ако искате да получите най-етикет може просто да се каже,
Искам етикет на подателя,
и отново, аз току-що го излят на UIButton.
Случайно знам, че подателят ще бъде UIButton.
Тя не винаги трябва да бъде UIButton.
Аз, например, може да регистрира същия манипулатора на събитие
за един за един бутон, за плъзгач.
В този случай, аз знам, че те са всички бутони, така че аз ще кажа
Искам това да бъде един бутон, а след това да получите етикет,
и от етикет Сега знам къде съм вътре на борда.
Тогава може просто да определят или X или O, да въртиш свой ред,
провери кой е спечелил, и т.н..
>> Всички въпроси по този доколкото?
Добре, кода, който е публикувал онлайн, ние не искаме да влязат в твърде много
на Tic Tac Toe логика, но сега можете да видите, че наистина
Всичко, което правим е, че ние цикъл с този масив,
така че ние имаме няколко за примки тук, и ние сме в сравнение с
имаме мач във всички редове, един мач в колона или нещо подобно.
За да стартирате това приложение, ако натиснете един от тези бутони
че играта метод е бил уволнен, така че това означава, че просто да настроите
бутона, за да бъде X, така че сега този бутон ще бъде О, и така нататък,
и така, че как започваме да си взаимодействат с тази единствена приложение на страницата.
>> Ние ще публикуваме кода, така че не се колебайте да чета, че,
но нека поговорим за някои приложения, които са повече от само една страница.
Толкова вълнуващо, като Tic Tac Toe беше много приложения в рамките на ЗИ
вид на тези тренировка надолу нещата с множество екрани.
Първата концепция, че ние ще трябва да говорим за протоколи,
и протокол е просто набор от методи
, които могат да обещаят да се определи.
Ако създам този нов протокол с два метода, тази първа,
ако типът на връщане е нищожен, аз го наричат ​​Foo.
Той не възприема аргументи. Имам друг метод.
Тя връща Int. Обадих лента и приема само един аргумент.
Всичко това протокол е, че се нарича SomeProtocol тук,
това е набор от неща, които някой може да изпълнява.
Не съм вътре в този протокол каза какво Foo.
Вместо това, аз съм просто казвам, че би могъл да определи Foo ако искате да.
Ако аз съм създаване на изглед към контролер или създаване на класа
Мога да вътре от този клас обещава да приложи
някои от тези методи, така например, ако кажа,
сега казва, че аз съм на обещанието си, че вътре
от този клас оглед контролер ще има дефиниции за Foo както и бар.
>> Защо е полезно?
Много от компонентите вътре на ЗИ се възползват от тази
дизайн модел, наречен делегация, и какво делегация казва
е, че, например, ако имам текстово поле
и има някои събития, които могат да бъдат регистрирани в рамките на моя текстовото поле,
вместо създаване на отделни събития, това, което мога да направя е, че може да се каже,
делегат на това текстово поле ще бъде някакъв предмет.
Когато казвам, че това е делегат сега това означава, че
когато някое събитие би са били изстреляни в текстовото поле
вместо да се налага да го регистрират или нещо подобно
това е просто ще се обадя на метод за делегата.
Например, вътре в текстовото поле ми имам метод за когато натиснете
извършва бутона в долния десен ъгъл,
и така, отколкото регистриране на манипулатора на събитие, което мога да кажа е
текстовото поле, тук е един обект, който искате да се обадите на метод за
всеки път, когато някой натисне бутона Готово,
и това означава, че този обект трябва да се приложат някои протокол
, който казва, обещавам да се определи, че извършва действия бутона,
защото, ако не определят този метод и натиснете Готово,
то тогава ще да бъде объркваща.
>> Нека да разгледаме един пример.
Тук аз просто имат едно текстово поле,
и едно от свойствата на това текстово поле тук на тази дясната страна на делегата.
Това е собственост на класа.
Това, което направих тук е, че контрол се натисне, и аз се измъкнат от това място тук
с оглед контролер, и че казва сега делегат на това текстово поле
ще бъде изглед на контролера.
Това означава, че когато се случват някои действия, отколкото да се регистрирате
работещи на отделни събития, които искам да ги изпратите на делегата.
Сега нека да разгледаме по мое мнение контролер.
Вътре на файла з съм дал обещание.
Съм обещал да приложи някои методи в рамките на този протокол
UITextFieldDelegate, и отново,
това е просто някакъв списък на някои неща, които мога да избирам за изпълнение.
>> Ако дойда тук, в моя m файл, Реализирал съм един такъв метод.
Съм го наричат ​​textFieldShouldReturn
защото това е това, което се нарича в рамките на протокола.
И сега всеки път, когато натиснете бутона Готово вътрешността на този текст поле
това е, което ще се нарича, така че аз не се регистрирате манипулатора на събитие.
Свързали делегат, и когато това събитие е уволнен
това е методът, който ще се нарича, така че ако дойда тук да ми сториборд и го пуснете
а това е натоварване можем да видим какво прави това.
На екрана ми има две неща.
Имам това текстово поле, и аз имам този етикет.
Аз съм просто казвам, че искам текста на този етикет
да бъде равна какъвто и да е потребител написали във вътрешността на текстовото поле.
Този следващия ред тук, е просто метод, който Обаждам
полето за текст, който казва, че искате да скриете клавиатурата.
Това е само произволен метод, който Apple избра.
>> Отново, преди да съм направил всичко, което имах, за да свържете всичко, така че аз за пръв път тук.
От гледна контролер плъзнете текстовото поле.
Пусна и аз мога да видя тук, че мога да направя това имущество текстово поле
тъй като тук в контролера съм определил имот
това е IBOutlet на текстово поле.
Това казва, че мога да свържем този имот
на текстово поле в моя UI.
Сега, когато щракнете върху това да започнете да пишете.
Сега, ако щракнете върху бутона Готово това се случва на огън
случай, че сега мога да се отговори на.
Няма събитие хендлери.
Ето как отговори на бутона извършва.
Направи ли смисъл?
>> Това не е дизайн модел, че не може някога да намерят себе си
създаването на своя собствен протокол, но просто знам, че някои
различните компоненти IOS регистрирайте се прояви по различни начини.
Бутони, например, използват тези IBActions.
Текстови полета, от друга страна, ще използваме делегати.
Ние можем да видим и да разгледаш всички, че във вътрешността на документацията.
Между другото, всъщност има един тон неща UI, построен в IOS за вас,
Така например, начина, по който аз направих, които твърдят, че в долния десен ъгъл
избрах този текстовото поле.
Аз дойдох тук.
Аз превъртат малко, за да се върнете ключа,
и аз действително могат да направят цял ​​куп неща, като, ако искам да кажа
спешно повикване, вместо да мога да направя това, което е напълно случаен,
и аз не знам защо има вградена в бутона за спешни повиквания,
но там, той казва спешно повикване в наистина малки букви.
Ето.
>> Определено проучи всички тези различни варианти в IOS.
Всички въпроси на делегатите?
Отново интересен дизайн модел, че трябва да сте наясно.
Добре, нека следващия път да погледнем в таблици.
Табличен изглед е основно, че списък на статии, които са навсякъде в IOS.
Когато сте обръщане чрез всичките си контакти, което търсите в
създаването страница, и този вид на списък на нещата, се нарича табличен изглед.
Прилагане на табличен изглед в IOS е доста проста.
Вместо да се правят клас, който се спуска от тази UIViewController
като сме направили,, преди ние просто трябва да се каже, отколкото
всичко UIViewController се искам да направя,
Казвам всичко, което се UITableViewController искам да направя,
, така че просто добавя някои допълнителни неща, които са напълно направил за нас.
Трябва да направим много малко всъщност да попълнят празните места вътре в таблицата.
>> За да се покаже таблицата, трябва да отговори на някои въпроси.
Първият въпрос, който трябва да се отговори, е колко секции са в таблицата?
Когато сте обръщане чрез контакти App ще забележите, че това е вид на
организирана от спомагателната система, тогава имате Bs, и това малко под заглавието.
Всяка от тях е наречен раздел.
Вие може или не може да се нуждаем от тях.
Първото нещо, което трябва да направите, е да реализира метод
наречен tableView: numberOfSectionsInTableView.
Това просто връща колко раздели,
така че това може да се каже, да върне едно, ако имате една голяма цел таблицата.
Следващият въпрос, който, че IOS трябва да знае, е колко реда имаш?
Например, вие сте обръщане чрез табличен изглед.
Имате определен брой песни, които търсите или фиксиран брой контакти.
Ако ти си, разбира се, не е много,
и така, че как IOS знае колко клетки за показване.
>> Отново, това може да се каже, нещо като завръщане 3.
Моят табличен изглед има три реда.
И накрая, Ios трябва да знае това, което изглежда като всяка клетка,
така че това, което всъщност се случва да направите е да се обадите на този метод,
този tableView: cellForRowAtIndexPath.
Ще се обадя на този метод при всяка една клетка в рамките на вашата трапеза.
Как не го знае колко пъти да го наречем?
Е, ти го каза вътрешността на броя на редовете в раздел.
Отиваме да се обадя на всеки един от нашите клетки,
и в рамките на това е мястото, където можете да правите неща, като
настроите текста или да ви кажа какво е това малко синия бутон от дясната страна.
Модел за получаване на тези клетки, отиваме да използвате този метод
нарича dequeueReusableCellWithIdentifier.
>> Objective-C е всъщност много добре познати за нелепо продължителността на техния метод имена,
и това е наистина хубава случая в точка например.
Този метод е това, просто казва, искам да ми дадеш една клетка.
Просто нещо IOS.
Ако имате нещо като 100 000 песни на вашия IPod
какво IOS не искате да направите, е да разпредели 100 000 клетки,
защото, ако сте в горната част на списъка, ти наистина трябва да бъде заделена памет
клетка, която е 99 000 реда надолу?
Не, защото, както сте се придвижите можете да разпределят като отидеш заедно.
Това се прави за вас.
Не е нужно да се притеснявате за всичко, което глупави неща изпълнение.
Всичко, което казваш, е ти се обадя този метод dequeueReusableCellWithIdentifier,
а това, добре, ако имате нужда да отивам да се създаде нова клетка за вас.
>> Но ако сте в дъното на таблицата и вече сте разпределени някои клетки
в горната част на таблицата, че наистина не започваш да се наложи в скоро време
Аз ще ви дам един от тези, гърба, вместо за разпределяне на нова,
и така това е хубаво загриженост изпълнение.
Вие не трябва да се разпределят клетки себе си.
Това ще ви даде една клетка.
Ще се върне към вас обект клетка.
След като сте обект на клетка, която може да направи неща, които да.
Можете да настроите текста на клетката с този имот, наречен текста на етикета.
Може да се добави, че стрелката на правото или на някои други случайни неща
с този друг имот, наречен accessoryType, и така нататък, и така нататък.
>> Нека хвърлим един поглед към действително прилагане табличен изглед.
Когато съм създал този проект
вместо да каже един изглед прилагане Аз всъщност дойдох тук
приложение за майстор-подробно и по същество това отговаря на поща App
на IPAD с изгледа на таблицата в ляво и след това съдържанието в дясно.
На Ipod или iPhone това ще да отговаря на един изглед на таблицата.
Това е мястото, където аз имам стартер код.
>> Нека първо да погледнем в сценария.
Всичко това е направено за мен, общо взето създаден.
Тази лента за навигация ми показа какво клетки например може да изглежда така,
и мога да щракнете два пъти върху това, промени заглавието.
Всякакви други опасения UI мога да се справя.
Ред, който изглежда много проста.
Вместо да се казва, това е UIViewController ние сме вече, че това е
TableViewController, така че ние знаем, че искаме да се обадя на всички тези методи за маса.
След Искам да създам един имот, който ще представлява
неща вътре на моята маса.
Тази таблица ще произволно показване
списък на плодове, и затова трябва да се създаде някакъв масив
, в който мога да вмъкнете плодове.
Вътре изпълнението файл първото нещо, което искам да направя
е, искам да направя, съм сигурен, че се инициализира този масив.
>> Казах заделянето на памет първоначален, създаден ми плодове масив,
и аз съм добавяне на четири неща към него, една от които е много по-спорен от другата 3.
И сега имам масив с размер 4.
Ние сме като се разклаща в CS50.
Сега имам масив с размер 4.
Сега отивам да започна да отговарям на тези въпроси, и всъщност,
когато създадох това приложение всичко това вече беше направил за мен.
Не трябва да въведете броя на секциите в табличен изглед.
Той вече е бил там, и аз съм попълване на бланки.
Колко секции имам?
One. Всичко е готово.
Колко редове имам?
Ами, аз имам един ред за всеки плод, така че този брой
е собственост на масив, който казва, колко е голям?
Това е колко реда имам.
И накрая, трябва да ти кажа, какво означава всяка клетка изглежда?
Отивам да кажа dequeueReusableCellWithIdentifier.
>> Отново, това е вече написана за мен.
Аз не трябва да правя така, и аз искам да се върна
тази клетка на това място.
Не забравяйте, че ние призоваваме този същия метод на всяка една клетка,
и този аргумент тук, този аргумент indexPath,
казва какъв ред съм инча
Ако кажа, че indexPath.row тук
това ще бъде 0, а след това ще бъде едно, а след това тя ще бъде 2, и това е, така че аз знам
каква клетка аз съм в момента показва.
Искам да настроите текста на клетката, като се използва този имот textLabel
да влезем вътре ми плодове масив и се
обект, съответстващ на всеки ред.
Ако това е низ, аз съм сега определяне
текста имот в низ.
Мога да направя нещо друго.
Също така мога да се регистрирате манипулатор на събитие за всяка от клетките,
така че когато докоснете всяка от тези клетки
това didSelectRowAtIndexPath, това ще да бъдат поканени за мен,
така че просто чрез определяне на това сега мога да се справя, което се случва
когато докоснете клетка, и отново, ние сме предаване, в което е подслушван клетка
така че да можем да го използвате отново същата тази манипулатора на събитие за всички от нашите клетки.
>> Отново, това е нещо, IOS прави за мен.
Да се ​​показват и друг досадни изскачащи
които просто казва, че сте избрали нещо, когато това нещо
ще бъде обект ред.
Когато го стартирам това, аз отивам да получите този хубав изглед на таблица
с по един ред за всеки един от тези плодове, и ако се докоснете един
тя ми казва, какво се е случило.
Направи ли смисъл?
Нека изградим малко по-сложно от един апартамент,
колкото кликнете сте избрали домат.
В приятна част за storyboarding
е, че не само ще ни помогне да дизайн екрани поотделно,
тя също ще ни помогне да свързват приложение цялата ни
окончателното приложение ще бъде изграждането е тази хубава спортни новини четец
и така ще има множество екрани, и затова всъщност може да представлява
всеки един от тези многобройни екрани на монтажната маса,
и аз мога да я увеличите и виж моя апартамент от високо ниво.
>> За да се създаде нов елемент вътре на моята сториборд
това е много проста вътрешността на Interface Builder.
Ако искате да добавите друг екран, за това, например,
Мога да я увеличите с щипка увеличение, което Apple обича толкова много,
и тук, преди да търся за един бутон
и аз влачите и пускате бутона
ако искате да създадете нов екран, всъщност може да просто да плъзнете и пуснете
целия контролер изглед, така че ако мога да взема този, отбий тук,
Ей, има друг екран, и така сега да използваме този файл сториборд
Мога да имам всички екрани вътре в моя апартамент, и мога да я увеличите
и да видим как те си взаимодействат.
Те не ще си взаимодействат все още.
Начинът, по който си взаимодействат тези два екрана можете да зададете отношения.
По принцип можете да го кажа екрана, когато натиснете този бутон,
Искам да се плъзга към този нов екран.
Това означава, че този вид отношения между
на първия екран и втория екран.
Ще трябва основно стрелката от този бутон на втория екран
казват, че когато натиснете този бутон, това е мястото, където искам да отида.
Точно както ние контролираме щракнали и влачен да се определят тези обекти
отиваме да направи същото нещо, което трябва да се определят тези плавно преминава.
>> Ще видим пример за това, и преди ние всъщност преход
от един екран на друг IOS е достатъчно добър, за да наричаме този метод
нарича prepareForSegue, и това е мястото, където можем да започнем
изпращане на данни от един апартамент към друг.
В този пример ние сме на път да го разгледат по същество ще ни позволи
да филтрирате бейзболни отбори от лиги и разделяния.
Когато изберете лигата, например, искам да прехода
до следващата екрана, където мога да се покажат всички на отделенията
в тази лига или всички различни екипи.
Трябва да изпрати на този екран, какви отбори трябва да покажете.
Да направя, че аз отивам да се възползват от този метод тук.
>> На последно място, само на произволна точка на IOS.
Ако искате да съхранявате данните е това нещо, наречено основни данни,
която всъщност е вид сложно да се работи с.
Можете също да използвате SQL за съхранение на данни,
което, отново, е хубаво, но някак по-сложно страна да работите,
но IOS също подкрепя тези наистина готини неща, наречени собственост списъци,
и с имуществена списък е само файл, който представлява ключови двойки стойност.
Вие дефинирате списък на ключове, а вие казвате, на този бутон ще бъде масив.
Този ключ ще бъде низ, и в общи линии всичко, което може да направи
в JSON можете да направите в рамките на списъка имот,
и така това наистина добре ни позволява да работим с някои данни.
Например, аз имам този Teams.plist, че съм създал.
Съм създал нов файл plist, и аз може да пробия.
Това е речник, това е речник, това са низове,
и така това е хубаво графично представяне на документ, JSON
или просто набор на ключови двойки стойност,
и така това са данните, че ще се работи с вътрешността на моя апартамент.
>> Нека първо да дойде тук. Ние имаме много повече файлове.
Но нека първо да дойде тук, за да сториборда.
Монтажната маса тук, ако мога да я увеличите
можем да видим, че това е поток от моя апартамент.
Аз съм първият ще започне на този екран.
Отивам да пробия до този екран,
и аз отивам да пробия до този екран, и можем да видим тук, че ако аз вид
се движат един от тези около ние сме тези стрелки от тук до тук,
и начина, по който се определи, че стрелката е, ако съм я увеличите малко,
и ако дойда тази гледна точка контролер,
и тук е клетка, и аз искам да кажа, че когато докоснете клетка
Искам да се плъзга към друг екран.
Мога просто задръжте натиснат контрол,
сменя малко, задръжте натиснат контрол, плъзнете тази клетка и да отидете.
>> И тук ние казваме какво е преход, който искате да използвате?
Искате ли да използвате този слайд нещо, което се нарича тласък?
Искате ли да се плъзга нагоре от дъното?
Това се нарича модален.
И след като щракнете върху един от тях, той ще направи тази стрелка за мен,
и това означава, че съм действително са това, което се случва, когато натиснете този бутон графично.
Аз не пиша код, за да плъзнете от един екран на следващия.
Определи тази визуално вътрешността на Interface Builder.
Ако кликнете върху тази стрелка, можем да видим, че дадох това име.
Го нарече showDivisions, и това е, така че мога да знам
какъв преход е на път да се случи, и ще видим защо само в секунда.
Ето как съм жични различните екрани в моя апартамент.
Ако това беше един бутон, например, а не цел маса,
Мога да контролирам кликнете върху бутона, плъзнете към следващия екран,
и това е как мога да направя навигация по този начин.
>> Наистина бързо, ако отидем в MasterViewController,
отново, ние просто ще се определи списък на нещата,
, които ще се показват в табличен изглед.
Ето аз казвам, че искате да направите тази plist файл,
и аз искам да го заредите в речника,
и след като имате този речник, аз ще съм отново да отговори на същите въпроси.
Ето броя на секциите.
Едно, има по един ред за всяка лига, а текстът на всяка клетка
трябва да бъде първата, първа лига, втората лига, и така нататък.
И накрая, аз отивам да използвате този метод, че току-що видяхме, наречена prepareForSegue
и това е метод, който ще бъде уволнен, когато щракнете
на един от тези редове и затова активирането на този преход
, че със стрелките.
Това се казва, че може да има няколко
отношения от един екран на друг.
Ако имам две копчета и всеки бутон ще ви отведе до различен екран
Отивам да имат два плавно преминава, 1 за всеки бутон.
Но това отново е prepareForSegue ще бъдат използвани повторно
за всеки от различни взаимоотношения, така че това означава, че се нуждаят от начин
идентифициране ако натиснете първия бутон или натиснете втория бутон.
>> Помниш ли, когато дадох, че Segue име, това showDivisions,
как сега знам, че това е Segue, че е била активирана.
Всичко, което искам да направя, е, че аз искам да кажа
Искам да разбера това, което току-що удари,
и така да се получи, че мога да кажа, че искам indexPath за избрания ред,
запомни indexPath просто казва, където аз просто кликнали,
и след това искам да кажа, че искам да разбера къде отивам.
Този destinationViewController, че е собственост на Segue.
Това е екрана Отивам да,
така че аз знам, че на екрана, аз отивам да се нарича DivisionsViewController
защото съм създал този клас,
И така, сега, ако кажа, d.divisions
Аз съм сега определяне собственост на контролера аз съм за да отидете на оглед.
Това е как аз съм изпращане на данни от един екран на друг екран.
>> Просто гледам на този DivisionsViewController
можете да видите тук, че в файла ч
там е, че собственост дивизии, и това е, което аз съм основно населяващи
така че това е как аз знам, че съм показване на поделенията, съответстващи на
лига, че аз кликнали, и отново,
действителния изглед на таблицата изглежда почти едни и същи, просто отговори на тези
3 прости въпроса, както и идентифициране на
какво се случва, когато преминавате към следващия екран.
Само няколко други неща.
Забелязвате ли на върха, че вместо да каже # включват
Аз съм сега казват, # внасят.
Това е просто нещо, Objective-C.
Вносът е основно по-хубав версия на включват,
и например, ние трябва да знаем какво този клас е,
така че не може просто да се каже, DivisionsViewController.
Ако ние не hashtag standardio.c вътрешността на нашия файл в
компилаторът не е имал представа какво ФОРМАТ.
По същия начин, ако не внасят DivisionsViewController
съставител наистина има никаква представа какво DivisionsViewController.
Просто се уверете, че вътрешността на вашите различни файлове м, се уверете, че можете да импортирате
съответните файлове ч, така че компилаторът знае какво става.
>> И накрая, какво Apple в крайна сметка се е показва някои данни, използвайки уеб оглед,
и така уеб оглед е обект, в който можете да вградите
малко уеб браузър в рамките на приложението ти.
Всичко, което трябва да направите, е да предоставя URL на вашия уеб браузър,
така че аз искам да отидете на mlb.mlb.com,
и това е как мога да получите достъп до началната страница за всеки отбор,
и така от преминаващи този адрес
уеб може да покаже това за мен и мога да разглеждате наоколо,
и симулатор е в употреба от другата.
Сега това дойде от моя plist.
Ако кликнете тази също дойде от моя plist, и тази плъзгащи се обработват
определянето на тези плавно преминава.
Кликнете върху този и още един,
и сега тук е моя UIWebView, така че просто като че
тук е сайт за URL, че аз просто вградени,
и аз не трябва да се справя с всичко луд.
Това е, как да се показва на уеб страница.
Неща като това бутона "Назад" тук са дадени и за мен
напълно безплатно, защото сте определили тези взаимоотношения, използвайки плавно преминава.
>> Някакви въпроси? Да.
[Student] Така че, когато използвате заделянето на памет, никога не трябва да безплатно нещо?
Точно така, когато ти се обадя заделянето на памет и INIT не е нужно да го освободи.
IOS ще се справят с всичко това за вас.
Това е чудесно, и не нарушава никакви правила. Да.
[Студентски] Ако ви се налага да се включат повече отбори, които биха могли да се поберат на екрана,
той автоматично ще имат опцията за превъртане, или е, че нещо трябва да добавите?
Точно така, ако имах повече отбори, например, автоматично ще се справят
превъртане за мен, и на всички опасения за изпълнение
с огромна маса са обработени изцяло за мен.
>> Други въпроси?
Всичко на този кодекс се ще да бъде публикуван.
Ние Споменахме малко по-дребни детайли,
но неща като определяне на някои свойства на уеб оглед
са само неща, които можете да получите, като посетите документация на Apple,
, което е много, много добре.
Те имат много примерни приложения и пример обичаи
на различни програмни интерфейси (API), така че определено чета, ако можете.
Просто някои полезни връзки, може да искате да погледнете.
Това са някои полезни ръководства документация.
URL адресите са масивни, така че те са съкратени.
Това първото е цялата библиотека на документация.
Има малки барове за търсене, така че ако започнете да пишете бутона
тя ще започнем да даваме цялата информация за всички неща, които можете да направите с един бутон.
Съм също са включени в Таблица Виж Програмиране Guide.
Той се справя с таблици в много по-подробно,
как да направя неща, като динамично добавяте клетки или редактиране клетки или да ги премахнете.
>> Има много примерни приложения от Apple, които ще ви покажем как да го направя,
и накрая, последната е на човека Насоките Интерфейс,
и това е в основата някаква дискусия на компонентите на потребителския интерфейс,
не правят неща като бутон, който е 4 пиксела от 4 пиксела.
Това е лоша идея, и други неща, които Apple иска да направи
за насърчаване на добър дизайн.
>> Някакви последни въпроси преди да приключим?
Добре, определено не се колебайте - ние ще имат специални етикети върху Обсъждане.
Ще имаме на IOS един, така че определено се чувстват свободни да използват това.
Ако искате да работите със съучениците си по проекти
или да разбера някои случайни неща IOS
не се колебайте да ми пишете, и определено чета цялата код онлайн, защото
само в интерес на времето ние вид Споменахме толкова повече
фини дребнозърнести подробности за нещата.
Но ако не, тогава на добър час по вашите проекти IOS, и аз се надявам ние имаме
голям приток на приложения в App Store.
[CS50.TV]