[Powered by Google Translate] [講座] [IOS:編寫應用程序像老闆] [和湯米MacWilliam] [哈佛大學] 這是CS50。[CS50.TV] 好吧,大家好,歡迎到iOS:編寫應用程序,像老闆。 本次研討會將重點上寫的iPhone應用程序 ,從而編寫應用程序的iPad,所以我們基本上要穿行 一對夫婦不同的例子,如何使一個應用程序,一個簡單的遊戲,如井字, 或者,如果你更感興趣的是一個應用程序,如某種形式的新聞閱讀器 的東西,我會談談,以及與互聯網交互。 這裡我們簡要的議程。 IOS應用程序是用的語言叫Objective-C的, 所以這是有點類似C,但沒有真正的所有, 因此,我們會說一點點關於語言本身 那麼如何來構建iPhone應用程序使用名為Xcode這個應用程序, 如果你還沒有下載,還覺得現在開始下載。 這是幾千兆字節。 在App Store上應該是免費的,所以你需要有一個蘋果 理想情況下運行最新版本的OS X。 如果你沒有,沒有問題。 我們有在科學中心提供的Mac電腦供您使用 安裝了XCode,所以隨意使用這些發展。 如果你想使一個應用程序,但不會有一個蘋果,不用擔心。 有大量的校內資源,為。 這樣的話,我們要去不同的應用程序,你可以覆蓋更大的例子。 Objective-C是技術上被稱為C的一個超集 這意味著,任何C代碼是有效的Objective-C代碼。 這意味著,我們種管上一些額外的功能,C.錄音 這些功能包括一些沒有寫的malloc再次,感謝上帝, 不必擔心那些愚蠢的指針,並釋放他們和所有的東西 你恨C,和它的種了,在Objective-C。 現在,Objective-C的標準庫有一個更大的, 所以你的Objective-C的免費內了更多的功能。 記住,當我們在寫PHP,我們注意到,我們就從 這個最小的語言,所有這些瘋狂的事情你可以做的巨大的圖書館。 同樣的事情發生在iOS。 有對象的東西,如佛歷,真的什麼 你可能認為在Objective-C的實現可能已經存在。 Objective-C的目標的一部分,被引用的東西 所謂的面向對象編程。 這是一個新的概念,但我們實際上大多學會 這些概念已經有很多。 面向對象編程背後的想法是,你要構建 您的代碼周圍有很多這些東西稱為類, 這些類的真正榮耀的結構。 內部的結構,我們基本上可以說這裡是一個東西, 這個東西可以有成員。 例如,一個鏈接的列表中的一個節點可以有其他的事情 像的值,在列表中的下一個節點的指針, 在一起的指針,該值由一個結構的一個實例。 類是非常相似的,除了 類也有他們內部的功能。 當我們宣布一個結構,我們只能說整數n或節點*未來。 現在用的Objective-C實際上,我們可以把功能 裡面的那些東西。 類可以做的另一件事是,他們可以從其他類繼承的數據。 例如,我們將著眼於一堆內置的Objective-C類。 其中一個可能的類,它代表一個屏幕的視圖, ,所以說,我要實現我自己的看法 我們基本上說對在蘋果的人,可能是非常好的人, 為我寫了這個類,它處理的事情,比如顯示按鈕 或呈現在屏幕上,我們將是非常痛苦的 實現所有的功能我們自己,所以通過簡單的 繼承的數據,我們可以說,你沒有在這個類中的一切 我也希望我的類的內部,然後我會做一些其他的東西, 即實​​現一個應用程序。 這是什麼字繼承的意思。我們會看到一個更具體的例子。 最後,與面向對象編程的關鍵是, 它會導致數據的封裝。 我們在一些問題設置,我們可以有這些大的,全局變量 和全局無處不在,這就是我們會保持跟踪狀態。 帶類,我們就可以開始封裝內的對象的信息。 如果我們有我們的應用程序的一個屏幕上,我們並不真正需要的任何數據從 在我們的應用程序內的,另一個屏幕, 等封裝在類的東西,這實際上導致 到更好的代碼設計,這是可能的,與一些附加功能。 Objective-C的。 預警,為Objective-C的語法是香蕉。 這是什麼之前,我們已經看到, 所以它是一點點的學習曲線已經習慣了 這到底是什麼意思呢? 但是,一旦你過去,最初的學習曲線,這是真的,真的很光滑 開始編寫應用程序。 要聲明一個類,這裡要說的是我的課,它的存在, 也許這裡有一些事情,我要定義後, 我會說接口。 我會說接口。我想給我的類的名稱。 再後來又在其他地方,我會說結束, 一切都在@接口和@結束的之間的 將是我的課。 這將是我們的。h文件裡面有什麼。 就像在C h文件,從根本上說,這裡有一些事情,會存在。 我不一定告訴你他們還做什麼, 但編譯器需要知道它們的存在。 後來我們。米內的文件,因為m的Objective-C的 我們要定義這些類的。 就像我們的文件,我們提供功能的實現。 在我們的m文件,我們要在這裡說的是什麼的全部功能 裡面的我的課,他們都做。 最後,內​​部的結構,我們可以說,這些花括號內 INT n或節點*下, 在Objective-C,我們要使用關鍵字@財產, 這是怎麼回事定義屬性, 非功能的一部分,我的課。 Objective-C中調用函數是香蕉。 當我們宣布我們說了些什麼,如int foo的功能在C 和開放的括號,然後把它的參數列表。 這是聲明的方法或函數看起來像在Objective-C的。 如果我要聲明一個函數或方法 我說的方法實際上是一個函數,這是一個類的成員, 因此種可互換的,但不是真的, 裡面有我的方法,我想創建一個新的方法。 這將返回任何結果,所以這將是void類型。 這是我的函數的返回類型。 現在,我們有括號括住在這裡,因為我不知道。 下一步將是我的函數的名稱, 最後,我們有一個分號,就像我們在C. 什麼是新來的,是這傢伙在這裡。 這連字符實際上是必要的,這說的是, 這種方法必須調用類的一個實例。 當我們宣布我們的結構,我們可能是這樣說: 結構節點n,和實際創建 或實例化這些結構,這樣我就可以真正開始工作 它裡面是什麼,所以這個破折號意味著我們必須 實例化的類,就像我們實例化結構 之前,我們可以調用這個方法就可以了。 如果我要開始我的方法添加參數 它變得更加香蕉。 這裡是我的方法的名稱。 然後我有一個冒號,這個冒號後,這裡說的幾個參數。 這種方法需要一個參數。 其參數的類型是int,這樣的說法和名稱 ,我要開始使用裡面的方法或變量叫我。 再次,這是方法。它接受一個參數。 如果你想開始添加更多的參數,得到更多的香蕉 中,我們有這個冒號在這裡說來我的參數列表。 第一個參數是一個整數。 現在,這個說法很有趣。 我的變量,將使用在我的功能 被稱為F,所以在我的功能,我可以說 F + = 1或東西。 這件事情在這裡基本上是一個關鍵,參數或參數。 就像我們的鍵值對的東西,如JSON或關聯數組 Objective-C的說,沒關係,只要它確實是明確的決定 當你調用一個方法,所有這些參數是什麼 實際上,我到他們的名字。 當你調用一個方法,你實際上會說andFloat的, 然後你會通過它。 有趣的是,這個人是沒有被命名,但所有的其他參數, 因此,如果我們有一個第三個參數我可以說andFloat的 和另一個浮動等。 當我把這些方法當然香蕉, 所以,如果我有一個對象,我定義了一個名為foo的方法, 我想打電話給它,而不是說foo的打開/關閉括號 我要打開一個支架。 下面是我的方法的名稱。 我要關閉支架,這是我調用它的對象。 請記住,所有這些方法都存在於類 因為類可以有定義的方法內的。 在這裡,我隨意創建某個類的一個對象, 這是這樣做的語法。 有2個步驟創建一個對象。 第一步是說,我要分配空間。 這相當於一個malloc。我們沒有說的malloc了。 我們放棄了米,它的alloc,取代的。c。米。 後,我們的alloc東西的,我們就需要對其進行初始化。 基本上,當你創建對象,你可能想有一些邏輯 執行時,他們創建的,所以你可以通過一些默認值 或類似的東西,所以這個init()方法實際上是創建對象。 我們第一次分配空間,就像我們在C, 然後我們將它初始化,可能會或可能不會做很多。 然後,我們回到這件事情的對象o。 這裡有一個明星,因為從技術上講,這是一個指針, 不過不用擔心,指針是不是什麼大不了的事在Objective-C了。 現在,我們已經實例化這個類NSObject的, 而這僅僅是一個隨機的類,蘋果。 我們已經實例化了,現在我有這個類的一個實例 在這個對象o,所以這意味著,如果我定義 這些方法,我可以打電話給他們這個樣子。 同樣,如果我想用一個參數來調用一個方法, 所以這是酒吧的方法,它有一個參數, 這裡是巴茲:QUX方法,所以這需要兩個參數。 這是調用這個對象o上的一個功能。 有意義嗎? 它的語法意義,但你種習慣。 好吧,讓我們來談談幾件事情中內置的Objective-C的 不一定C建成。 在C語言中,我們種的,因為這些愚蠢的字符數組與字符串處理, 真的很討厭。 Objective-C的全部建成,對我們來說,它是建立在 使用這個類稱為NSString的。 當我想創建一個NSString我們有更艱澀難懂的語法。 而不是說:“CS50”我們說:“CS50” 而這僅僅是聲明字符串中的Objective-C的語法。 這是非常容易忘記,所以不要。 現在,一旦我有這個,這是一個字符串,但要注意 它實際上是一個對象。 我說的NSString,這意味著我實例化的類 所謂的NSString,別人寫的我, 和他們是很不錯的了,所以現在 我可以調用它的方法。 如果我調用該方法的對象s的長度 它會回到我這裡來的字符串的長度。 這是一樣的strlen C. 這將返回4。 同樣,我可能要關心的是另一種方法這個characterAtIndex。 這是一個方法,說這個字符串s 我希望你能得到零級人物, ,所以這將返回到我的字符c, 有一大堆以上的這些方法,你可以在Google真的很容易。 蘋果的文檔是偉大的,我們就來看看,在一個位。 這些都是字符串。 我們也有內置的可變大小的數組 請記住,在C時,我們聲明數組 我們不得不說,你有5個元素,故事的結尾。 當我們到了JavaScript和PHP,我們可以開始 做的事情,如添加元素或移動元素。 我們可以做同樣的Objective-C中。 在正常的C方式,而不是創建一個數組 我們再次調用另一個類的NSMutableArray。 還有的NSArray, 這是怎麼回事,基本上封裝了一些陣列。 這是說我想要做的第一件事情是我想分配 為新陣列的空間,並在我分配 然後,我需要對其進行初始化。 同樣,調用這些方法。 現在,這意味著這個對象內部的一個 我有一個空數組坐在那裡。 如果我要添加到這個數組中的東西,我可以調用AddObject方法。 我想補充一個對象數組a,我想補充的字符串CS50。 如果我想反過來刪除,我可以說,我要 刪除對象在陣列上的第一個地方或物件。 有意義嗎? 好了,你種習慣了這方括號內的事情。 順便說一下,裡面有很多蘋果的圖書館,你會看到這個NS。 NS實際上代表的下一個步驟,這是史蒂夫·喬布斯最早的公司之一, 而這也正是他真的開始寫了很多的代碼 作為一種適用於Mac OS X和所有其他的東西的基礎, 所以這NS是這個漂亮遺留下來的一種喊出來較早的公​​司之一 回來時,蘋果公司第一次開始了。 它無處不在。 讓我們來看看一個更全面的Objective-C的例子。 在這裡,我在裡面的Xcode。 到這裡,我第一次從App Store下載的XCode, 打開它,然後我去到文件, 在這裡,新的,然後項目。 當我這樣做,我有所有這些選項是什麼,我想創建, 所以我們就來看看這些選項後, 但在這個例子中,因為我們實際上沒有去有一個應用程序, 我來到這裡,和我說的命令行工具, 這是一個應用程序,我可以在命令行中運行 就像我們已經從C 這就是我創造了這個項目,所以現在我在這裡, 讓我們先來看看這個文件,這應該很熟悉。 我有一個int的名稱。還有我的朋友,我的其他哥們ARGV的argc。 因此,我們可以看到,這是我的第一個Objective-C的應用程序的入口點。 在這裡,我們可以忽略這個現在。 這基本上是一些內存管理的東西,你不會真的 以往任何時候都不必擔心。 讓我們來看看這首塊。 這第一行,如果我說學生愛麗絲= [[學生的alloc]初始化]那是什麼做的? 這首先這裡的學生,這可能是一個類。 這是不是一個類,蘋果寫的,但它是一個類,我寫的。 我想要做的第一件事情是,我想新的學生分配空間, 然後我想將它初始化,所以這讓我回 這個新的學生對象,我存儲在一個叫愛麗絲的變量。 那類從何而來? 那麼,在這裡的左側,這些都是我的項目裡面的不同的文件。 我們可以看到,在這裡我有一個Student.h和Student.m。 h文件,記住,是我宣布所有的事情 將存在於類。 讓我們來看看在那。 好了,在這裡,我們有這樣的@接口,這說來 一切都將存在於我的課的聲明。 然後,我有一個冒號。然後,我有這樣的NSObject的事情。 這的結腸表示,繼承位,我們的討論早一點。 這是說一NSObject可以做的一切 NSObject的是別人寫的這個類, 這的NSObject的可以做的一切,我想是能夠做到這一點。 他說:NSObject的,這意味著我基本上 繼承另一個類的所有的功能。 這真的給了我一大堆,我可以用不同的方法和屬性。 在這裡我創建2個屬性。 這意味著我的學生,如果這是一個結構,這將是兩件事情 我的結構內,使每一個學生都有一個名字 這是一個字符串,和學生也有一個檔次, 這是一個int。 最後,在這裡我要為我的學生創建一個方法。 我打電話給我的方法,initWithName,它需要一個參數, 該參數是一個字符串,我把它叫做命名。 現在,讓我們來看看我們如何實現這個類。 在這裡,我現在是我的m文件裡面, m的實施,我猜。 我有我的實現,我的目的,這裡是什麼地方,我實際上是在定義 什麼initWithName。 我有initWithName,我的參數的名稱,然後將此 實際上,我創建一個學生, 所以這是一個有點神秘的,但是這是種樣板 要包括在你的構造函數。 在這裡,這個初始化函數initWithName,是一個類型的構造函數。 你基本上是興建一座新的學生對象 也許它內部的數據發送一些。 我想要做的第一件事情是我要調用init這超級事情上。 請記住,當我回到這裡。h文件 這一切的NSObject的學生也有。 這意味著,當我創建了一個學生,我還需要做的是 確保NSObject的,我繼承所有的數據 正確初始化。 我需要說的是,這個超級實際上是指父類 我繼承的,所以我想確保我初始化 一切,我根據之前,我開始嘗試使用它。 然後,如果正確初始化這就像說如果malloc 沒有返回null,然後我就可以開始設置一些屬性。 在JavaScript和PHP,我們有這個關鍵字叫這個, 這是指一類的當前實例。 在Objective-C中,我們稱這種自我。 當我說self.name,這意味著該對象 我剛剛創建時,我說,學生的alloc初始化, 將會給我回一個對象。 這意味著我要設置該對象的名稱 無論我剛剛傳入 就像在C中,我們訪問這個點, 所以self.name說的學生對象的名稱 現在不管你剛剛傳入 所以最後,我可以返回它,所以我得到的東西回來。 有問題嗎? 好了,所以這個自我=超初始化的, 如果你不完全理解繼承的東西,不要擔心。 只知道,如果你想使自己的init()方法只是 做到這一點,你會好到哪裡去。 是啊。>> [學生]是什麼,如果自我平均? 這意味著,當我們的malloc的東西,我們總是檢查,如果它等於空, 如果它是空的,然後我們退出。 這是同樣的事情,因為如果此方法返回null,那麼我們很可能要賽格故障 如果我們開始試圖操縱它。 這是我們的學生類。 這意味著我們可以初始化我們的學生在以下兩種方法之一。 如果我說學生的alloc初始化,我沒有使用這種方法,我只寫了, 不是我可以簡單地說alice.name, 現在我要設置該屬性的名稱。 同樣,如果我想使用,initWithName方法 我可以簡單地說ALLOC,然後,而不是說的init 我要調用該方法,我剛剛創建的,我要通過在鮑勃。 在這一點上,此對象鮑勃具有名稱等於給Bob。 好了,在這裡我使用NSMutableArray裡,我們前面介紹過。 我我分配space.Then的我一個新的數組初始化。 我要的東西給它加2。 現在,此數組保存學生對象。 請注意,沒有在哪個地方,我不得不說這是一個數組的學生。 我說,它是一個數組期。 然後,我可以把任何在它裡面,我想。 在這裡,我有兩個對象。 最後,我有另一個對象,這個TF。 在TF.h在這裡基本上是同樣的事情。 我從NSObject繼承的方式, 創建類時,這一切都為你做, 這種接口的樣板。 它有一個屬性的學生。 我有一對夫婦的方法在這裡並不真正做了一大堆, 因此,這意味著創建這個TF對象後, 我可以調用此方法的檔次上是這樣的。 Objective-C語法上的任何問題,然後才開始遷入一些更 有趣的應用程序開發的東西嗎? 好吧,讓我們的實際上是一個iPhone應用程序。 核心類,你會在你的iPhone應用程序使用被稱為視圖控制器, 一個視圖控制器基本上是一個單一的屏幕 你的應用程序裡面,所以如果我的音樂應用程序,例如, 一個視圖控制器可以代表我的視圖中查看所有歌曲在我的iPhone。 另一種觀點控制器可以當我點擊一首歌曲,開始播放 我深入到藝術家。 這些不同的畫面中的每一個都可以表示為一個不同的視圖控制器, 一個視圖控制器類實際上只是一個說,這個屏幕是如何工作的。 裡面的東西的一個視圖控制器,我們要的屬性, 這樣的事情像一個按鈕,將是我們的視圖控制器的屬性。 我們也有方法,這些都是基本的事件處理程序。 這種方法說,當你按下這個按鈕時, 我想要做的事情,最後,再次, 我們將使用這種自我關鍵字來訪問當前實例。 要建立在iOS界面實際上是真的,真的很容易。 他們有這個漂亮的叫Interface Builder中的拖放界面, 和2線的核心概念,你的Objective-C的界面生成器 IBOutlet和IBAction。 一個IBOutlet簡單地說,如果你聲明一個屬性,這是一個按鈕, 你想要把它掛在您的實際UI的東西, 你會說,這是一個出口。 同樣,如果你​​想表示一個事件處理程序 那麼你會說​​這是一個行動。 要真正連接的圖形表示 你的代碼是真的,真的很簡單。 如果你想附加一個IBOutlet,所有你所要做的是控制點擊, 我們會看到一個例子,這是真的快。 您可以控制​​點擊它說 - 視圖 - 控制器。 你要拖動到界面,或者相反, 如果你想連接的事件處理程序,你要拖動的界面 在另一個方向上。 讓我們來看看在一個非常簡單的iOS的例子。 讓我們創建一個新的項目。 我要來這裡申請, 我要“的單一視圖應用程序。 我要點擊下一步。我會給你我的項目的名稱。 我會打電話給它餵。 有趣的是,蘋果公司不承擔您要創建一個產品 這樣就可以賣它,他們就可以賺錢。 在這裡我會說,這是一個iPhone應用程序。 您可以創建一個iPad應用程序,或者如果您想創建這些應用程序之一 支持這兩種設備可以做到這一點。 這是你想要看起來像你的复選標記。 您要使用的故事板,我們將在後​​面看到, 你一定要使用自動的引用計數, 這是一個很好的功能,可以防止你說malloc和free。 除非你想調用malloc和free,我將離開這個托運。 我會單擊“下一步”,最後,這是怎麼回事,問我在哪裡,我想將它保存。 我會打造成“,在這裡,我們去。 我創建了一個新的項目。 在這裡的左邊是我的項目內的所有文件, 請注意,我得到了一大堆,我什至沒有做任何事情。 IOS是很大的。 例如,在這裡ViewController.h, 這將是我的第一個視圖控制器, 所以我的應用程序的第一個屏幕內。 現在我們知道這是什麼話說。 我們說,我調用這個類的ViewController, 一個ViewController的一切,一個UIViewController, 而這,又是一些類,蘋果寫道,我們做了很多方便的東西 我想顯示在屏幕上。 在這裡我可以真正開始界定什麼是我的視圖控制器, 事實證明,我真的不需要任何。 這是蘋果給我免費的樣板代碼。 我確實需要,第一行,我沒有一類, 這樣我們就可以擺脫,擺脫這一點。 好了,所以這是我空白的屏幕。 現在,讓我們的點擊這MainStoryboard.storyboard, 這是它開始變得有趣的地方。 這代表我的應用程序的第一個屏幕。 如果我想在HTML中添加一個按鈕,我不得不創建一個按鈕,標籤。 在Android中,你必須創建一個按鈕,標籤, 但在iOS中,如果我只是來這裡的右下角 ,如果我點擊,第3個在這裡說的對象, 我可以向下滾動,或者我就可以開始搜索按鈕。 你看,一個按鈕,所以如果我拖動和下降這一權利, 我只是增加了一個按鈕,此畫面在我的應用程序。 如果我想改變的文字,我可以雙擊它, 說誘人,如“按我的東西。” 好了,現在如果我運行這個程序,所以我們編譯它, 運行,我點擊播放按鈕在左上角,有我的應用程序。 我沒有做任何事情,我有一個甜美的期待的iPhone應用程序。 如果我要阻止它,你可以單擊“停止”按鈕 因為它更有趣。 比方說,我真正想要的東西發生時,我按下這個按鈕。 要做到這一點,我需要做的是,我需要創建 一個新的事件處理程序或行動。 這意味著,我需要創建一些方法,我希望被稱為 當我按下按鈕,讓我們創建一個新的方法。 我裡面的ViewController.h。 我需要說的方法存在。 我需要一個連字符,因為我將要調用此視圖控制器。 我需要給這個類型。 “這是怎麼回事,IBAction的事情,我們在前面看到的。 這是一個事件處理程序,所以它會返回一個IBAction, 這是一個暗示說,到XCode 這是我想要的東西線的東西。 我可以給它一個名字,如buttonPressed,分號。 現在,我宣布我的班級內部的一種新方法。 我說的這個方法存在。 現在,讓我們的進入ViewController.m, 讓我們說,這種方法可以做什麼。 例如,如果我開始打字,(空)buttonPressed 通知XCode是非常好的,對我來說自動完成。 這真是太棒了。 請注意這裡面的m文件,我也可以說無效, 這是,因為這,IBAction是不實際的類型。 它實際上包括hashtag定義的是一個空白的地方, 再次,這只是一個提示Xcode中說: 我想這是一個事件處理程序中,我們將看到為什麼在短短的一秒鐘。 按下此按鈕時,我會做一些惱人的 我想顯示一個彈出窗口。 要做到這一點,我可以創建一個新的類的實例稱為UIAlertView, 這是一類,蘋果寫道,要顯示煩人的彈出窗口。 我們稱這個彈出警報,我有2個步驟,記住,要創建此對象。 我需要做的第一件事情是分配空間。 我想的UIAlertView。 我想分配空間。這是我的第一種方法。 我的下一個方法是我想要初始化它, 所以我有這個又大又長的方法,稱為initWithTitle。 這基本上就是要控制這個彈出窗口說什麼。 我的彈出窗口的標題可以招呼。 這個彈出的消息是:“這是iOS的。” 代表的事,我不知道那是什麼。 比方說,沒什麼。 現在的按鈕,會出現可以說是“肯定的是,” 和我真的不希望任何其他的按鈕,讓我們刪除,並關閉支架。 好吧,我創建了一個額外的一個。我們走吧。 這就是我如何可以創建一個新的彈出窗口。 如果我要顯示的彈出窗口,我想調用Show方法。 要做到這一點,我可以說警報,並顯示, 再次,自動完成超好聽。 如果我忘了那是什麼,如果我只輸入S, 我在這裡可以通過滾動弄清楚它是什麼, 過濾得很好。 現在我創造了這個新的彈出窗口。 我們會回來後,代表意味著什麼 現在,我想說,我想這個方法被解僱 當我按下按鈕,所以我要回來我的故事板, 我想現在重視這個IBAction。 你想要做的第一件事情就是按一下按鈕。 當我按下這個按鈕,我想事情發生。 我不會去,按住控制權。 我要單擊並拖動按鈕 在這裡,它說 - 視圖 - 控制器。 我們可以看到,它很好地亮起來。 如果我讓我的鼠標,我現在有這個彈出,在這裡,我有一些選擇。 其中之一是我可以註冊的事件。 這些都是我宣布我的h文件IBActions這些方法。 這是Xcode如何知道什麼應該出現在這個小名單, 所以,這只是一個提示。 如果我按下按鈕上按一下,我現在已經註冊的事件處理程序。 在JavaScript中,我們不得不說,我有一些代碼,註冊事件處理程序。 在Objective-C,它真的那麼容易。 如果我運行一次 現在當我按下按鈕時,要解僱我的事件處理程序, 我要得到這個彈出。 超級,超級簡單。 如果你想看到所有已經登記的事件 上一個組成部分,如果我點擊此按鈕 和我來這裡的右側 第一次在這裡你可以看到我喜歡的類型的按鈕可以做的事情, 所以如果你想那些我的“添加聯繫人”按鈕 或什麼的。 如果我想看到所有的事件,此按鈕 如果我遠道而來,在這裡的右側 在活動中,我有所有這些不同的事件,我們可以在這裡看到。 我可以按按鈕,當我放手的按鈕,當我雙擊自來水或任何, 我剛剛註冊的是這一事件被稱為觸摸裡面, 說,一旦我的手指離開按鈕 該事件要火了,這也正是剛剛發生了什麼。 這是一種默認的按鈕被按下的事件。 有任何疑問,這麼遠嗎? 好吧,這就是我們可以開始連接起來的東西在我們的代碼中 進入裡面的東西,我們的接口。 請記住我們必須做的第一件事是找到的代碼, 然後我們有線接口的代碼, 那是我們的第一個應用程序。 好吧,這真是太酷了,我們創建此按鈕。 如果我們不希望有創建一堆的屬性 代表這些按鈕嗎? 例如,在井字我有9個按鍵, 它會是超級,超級討厭有拖放9倍 或者如果我不得不做出打井81,而不是9 ,我不得不拖放81倍,這就是跛腳。 我們能做些什麼,而不是很像一個HTML 當我們有ID和名字一樣的東西,我們可以尋找的東西 通過他們的ID,有一個類似的概念在iOS稱為標籤。 標記是一個唯一的數字標識符的組成部分。 例如,如果我說這有一個標記為0, 如果我創建一個按鈕,並給它一個標記為0,我們將看到如何做到這一點在短短的一秒鐘, 如果我想要得到這個按鈕,我可以簡單地說,我要打電話 viewWithTag對象上的方法,在這裡, self.view,它代表了當前的屏幕,例如。 如果我打電話,viewWithTag的方法,我要拉回來的按鈕標記0。 讓我們一起來看看這款大廈井字。 首先,這是我的故事板。 我已經創建了這10個UI按鈕。 請注意,他們都是一樣的尺寸。 如果我點擊了其中的一個,我在這裡在此右側回來 你會看到我調整了字體在這裡,所以我做的字體有點大了, 但我也做了我設置這個標籤。 我說,這有一個標記為1,這是最佳的左側。 現在,如果我點擊另一個按鈕,這樣第二個, 現在,你會看到我的標籤2。 每個按鈕都有一個唯一的標籤, 所以這是以後怎麼我要開始交互 我的應用程序。 這是所有裡面的一個視圖控制器, 但這裡是我們所擁有的。 我們這裡有3個屬性。 第一個和最後一個要代表我的板子的狀態。 基本上,這是一個數組,表示其中X和OS。 這等人告訴我們該輪到誰了。 你會發現,我也有這些東西在這裡。 在此之前,當我們聲明的屬性,我們給了他們一個名字和一個類型。 我們也可以給他們一些額外的信息。 這第一個說非原子,這是什麼 基本上只有一件事,永遠不會試圖訪問這個變量的時候。 你可以做更複雜的應用程序都是多線程的, 和做回,在Scratch我們有不同的線程, 不同的精靈可以做不同的事情在同一時間。 如果是這樣的情況並非如此,它不是什麼,我們將著眼於, 如果說非原子,它實際上使事情有點快。 我們也有這樣的東西叫分配,強,或弱。 這種分配,只是說,這是一個標準的類型。 這是不是一個對象或者一個指針,因為這僅僅是一個布爾值, 因此,BOOL是內置的Objective-C的。 這是說,不要試圖做任何事情看中這裡的指針。 這是一個普通的老定標器。 強與弱,弱的說,其實 我想這是被人指指點點的東西在視圖控制器。 我不打算實際分配,或init這個我。 Interface Builder的,當我運行的應用程序,要處理所有的初始化。 如果我說弱者,另外一個人說將要創建此。 如果我說強,說,我要一個 創建此板對象, 所以在這裡,我在這裡有更多的方法, 例如,新的遊戲的按鈕被按下時,一個動作, 當任何其他的按鈕被按下時,一個動作, 等等。 我們不會得到到井字太多的邏輯, 雖然這是非常令人興奮的,但是讓我們一起來看看 一些我們可以做的事情,裡面的iOS。 這種新的遊戲方法是將被解僱 每當我按新的遊戲按鍵。 要掛鉤,我只是過來我的故事板。 我點擊了新的遊戲。 如果我來這裡的右側,我可以看到, 觸摸起來裡面是有線到的newGame的方法。 這就是為什麼這會被解僱。 newGame方法做一些設置。 這是怎麼回事,說我要你清除板的狀態。 這是一個很好的方法,可變數組。 這是怎麼說的,現在輪到X的, 現在,我將充分利用本viewWithTag的事情。 我知道,我的按鈕的標籤1-9, 這是我隨意挑的東西。 如果我要設置每個按鈕的文本是空的 因為我剛剛開始一個新的遊戲,我不希望任何 XS或操作系統被遺留下來的,我可以做到這一點。 我可以說我想要的標籤,1,2,3,4等等。 這將每次拉不同的按鈕。 在這裡,我打算將它轉換為UIButton的。 就像我們投int到彩車,反之亦然 這說,我想投一個UIButton。 這意味著此類型的將是一個UIButton * 因為三分球,但不用擔心,他們不再害怕。 一旦我有這個按鈕,我要調用一個方法就可以了。 這種方法被稱為setTitle forState,所以這說 我想設置的按鈕的文本是空字符串, 我希望它是空字符串時,它不是按。 如果我用這個方法,我可以改變文字的按鈕 只要有人點擊它,但我們想說的按鈕時,只是坐在那裡, 我想是空白的文本。 最後,我們要初始化我的板, 我要去說,目前一切都在0, 所以這個董事會的成員不變的是一個可變的數組, 這意味著我可以調用AddObject方法,只是它裡面的0。 這是發生了什麼,當我創建一個新的遊戲。 讓我們來看看另一個。 這種方法在這裡是要被按壓的IBAction 每次這些廣場之一被按下。 現在我們這裡有一些井字邏輯。 我們計算出該輪到誰了, 此基礎上,我們要么設置一個X或O, 但我們注意到,我們打算重用相同的事件處理程序 每一個單一的其中一個按鈕。 這意味著,我沒有的方法的最佳的左按鈕, 不同的方法右下角的按鈕,但我可以做到這一點。 這不會真的是不錯的設計。 實際上,我要確定我在這裡做什麼 被按下的按鈕的標記是什麼。 您會注意到,這種打法方法接受一個參數。 這就是所謂的發件人和發送者的發送者要 究竟代表什麼時採取行動。 如果我按下一個按鈕,發送者將是該UIButton的 我按下,這樣就意味著,UIButton的 有一個標記,因為我創建了一個標籤。 如果我想要得到的標籤,我可以簡單地說 我想在標籤的發送者, ,我剛剛鑄造一個UIButton。 我碰巧知道發送者將是一個UIButton。 它並不總是必須是一個UIButton。 例如,我可以,我註冊了相同的事件處理程序  為一個用於一個按鈕,一個用於一個滑塊。 在這種情況下,我知道他們所有的按鈕,所以我說 我想這是一個按鈕,然後我就可以得到標籤, 從標籤我現在知道我在裡面的電路板。 然後,我可以簡單地設置X或O,可翻轉轉, 檢查誰贏了,等等。 至今有任何疑問? 好了,所有的代碼,我們在網上發布,我們不希望進入太多 的的井字邏輯,但現在你可以看到,真正 我們正在做的是,我們遍歷這個數組, 因此,我們有一對夫婦的for循環在這裡,我們只是比較看 我們有一個匹配的所有行,比賽在一列或類似的東西。 要真正運行這個程序,如果我點擊其中一個按鈕 玩的方法被解僱了,所以這意味著我只設置 是X的按鈕,所以現在這個按鈕將是一個O,等等, 所以這是我們如何開始這個單頁面應用程序進行交互。 我們將發布的代碼,可以隨意細讀, 但現在,讓我們來談論一些應用程序,更多的不僅僅是一個頁面。 井字令人興奮的是,大量的應用程序裡面的iOS 這些鑽孔是一種具有多個屏幕下來的東西。 第一個概念,我們需要談論的協議, 協議就是一組方法 你能答應來定義。 如果我創建這個新的協議有2種方法,第一個, 如果返回類型為void,我把它叫做foo的。 它不帶任何參數。我有另一種方法。 它返回一個int。我打電話給它吧,它需要一個參數。 所有這一切協議,這就是所謂的SomeProtocol在這裡, 這是一組的人可以實現的事情。 我還沒有在本協議說什麼foo的。 相反,我只是說如果你想,你可以foo定義。 如果我創建一個視圖控制器或創建一個類 我可以在這個類的承諾,以實現 其中的一些方法,所以舉例來說,如果說 現在說我在做一個對您的承諾,這裡面 這個視圖控制器類的,我會為foo和bar的定義。 這是為什麼有用嗎? 很多內部組件的iOS利用 設計模式叫做代表團,代表團說什麼 是,舉例來說,如果我有一個文本框 有我的文本框內部的一些事件,可以註冊, 而不是創建單獨的事件,我能做些什麼,我可以說 這個文本框的委託,將某些對象。 當我說,這是一個代表現在這意味著, 當有一些事件將會被解僱,在文本框中 而不必註冊或類似的東西 它只是要調用的方法的委託。 例如,在裡面我有一個方法,當我按我的文本框 完成後,在右下角的按鈕, 等,而不是註冊的事件處理程序,我可以說是 文本框,這裡是一個對象,我希望你調用一個方法 每次有人按下“完成”按鈕, 這意味著,對象必須實現某些協議 說我答應做的按鈕操作定義, 因為如果不定義該方法,你按了, 那麼它會是混亂。 讓我們來看看一個例子。 在這裡,我只是有一個文本框, 在這裡在此右側的這個文本框的屬性之一是委託。 這是一個屬性的類。 我在這裡做的是我控制點擊,在這裡,我拖著這點 到視圖控制器,並且說,現在這個文本框的委託, 將是視圖控制器。 這意味著,當發生某些行動,而不是登記 我要你把它們發送到委託獨立的事件處理程序。 現在,讓我們來看看在我的視圖控制器。 裡面的。h文件中,我已經作出了承諾。 我已經答應來實現本協議內的一些方法 被稱為UITextFieldDelegate,並再次, 這僅僅是一些列表的一些事情,我可以選擇執行。 如果我來到這裡,在我的m文件,我已經實現了這樣的一個方法。 我把它稱為textFieldShouldReturn 因為這是這是什麼所謂的協議內。 現在每當我按下完成按鈕,該文本字段內 這是發生了什麼事情被調用,所以我沒有註冊事件處理程序。 我的委託,每次發生此事件被觸發 這是將被調用的方法,所以,如果我來這裡我的故事板,並運行它 而加載,我們可以看到,這是什麼做的。 在我的屏幕上,我有兩件事情。 我有這樣的文字欄位,我有這樣的標籤。 我只是說,我想這個標籤的文本 等於不管用戶鍵入的文本字段內。 下面這一行,這裡是一個簡單的方法,我給你打電話 在文本字段說,我希望你能隱藏鍵盤。 這僅僅是蘋果選擇的任意方法。 同樣,在我做了什麼,我不得不將所有東西了,所以我第一次來到這裡。 我的視圖控制器拖動到文本框中。 我放手,我可以看到,在這裡,我可以使這個文本字段屬性 因為在這裡的視圖控制器中,我定義了一個屬性 這是一個IBOutlet的文本字段。 這是說,我可以連接屬性 我的用戶界面中的文本字段。 現在,當我點擊這個,我可以開始輸入。 現在,如果我點擊“完成”按鈕,這是怎麼回事火 我現在可以響應的事件。 事件處理程序。 這就是我剛做的按鈕。 有意義嗎? 這是一種設計模式,你可能會不會發現自己 創建自己的協議,但我們知道,有些 不同的iOS組件註冊事件以不同的方式。 按鈕,例如,使用這些IBActions。 文本字段,另一方面,要使用的代表。 我們可以看到,你可以看看,裡面的所有的文件。 順便說一下,其實有一噸重的為你的iOS內置的UI東西, 例如,在我說在右下角 我選擇這個文本字段。 我這邊走了過來。 我向下滾動了一下,返回鍵, 我實際上可以使這一大堆的東西一樣,如果我想,說 緊急呼叫,而不是我能做到這一點,這是完全隨機的, 我不知道為什麼有一個內置的緊急呼叫按鈕, 但也有,它說,在非常小的字母緊急呼叫。 你去那裡。 絕對探討所有在iOS這些不同的選擇。 代表任何疑問嗎? 同樣,只是一個有趣的設計模式,你應該知道的。 好吧,讓我們的下一代來看看在表視圖。 表視圖是基本的項目清單,是所有的地方在iOS。 當你翻閱您的所有聯繫人,你看 設置頁面的事情的清單,而這種被稱為表視圖。 在iOS上實現表視圖是非常簡單的。 而不是下降,UIViewController的一類 就像我們以前做之前,我們只需要簡單地說,而不是 一個UIViewController沒有我想要做的一切, 我說一個UITableViewController沒有我想要做的一切, 所以,簡單地添加一些額外的東西,是完全為我們做了。 我們需要做的很少,基本上填補空白的表內。 為了顯示一個表,我需要回答一些問題。 我要回答的第一個問題是表中有多少段? 當你翻閱您的聯繫人應用程序,你會發現它的種 組織的作為,那麼你的家,你有那麼一點子標題。 每個這些被稱為一節。 您可能會或可能不需要這些。 你需要做的第一件事是實現的方法 所謂的tableView:numberOfSectionsInTableView。 這只是簡單地返回你有多少段, 因此,可以說,如果你有一個很大的表視圖,返回一個。 接下來的問題是,內部監督辦公室需要知道的是你有多少行? 例如,你正在翻閱一表視圖。 你有一個固定數量的歌曲,你看或固定數量的接觸。 如果你是我,當然,沒有那麼多, 所以這是如何的iOS知道有多少細胞顯示。 同樣,這可以說是這樣回報3。 我的表視圖中有3行。 最後,IOS需要知道每一個細胞看起來像什麼, 所以它實際上是做什麼的,是這裡調用此方法, 的tableView:cellForRowAtIndexPath。 這將調用此方法,你的表上的每一個細胞內。 它是如何知道多少次調用它呢? 好了,你告訴它裡面節中的行數。 我們會打電話給我們的細胞, 在這裡面,在這裡你可以真正喜歡做的事情 設置文本,或者告訴你是什麼藍色的小按鈕,在右側。 的模式,讓這些細胞,我們要使用此方法 被稱為dequeueReusableCellWithIdentifier。 Objective-C的實際上是非常有名的荒謬的長度它們的方法名稱, 這確實是一個不錯的點的例子。 這種方法確實是這樣的,只是說我要你給我一個細胞。 只是iOS的事情。 如果你有像10萬首歌曲,在你的iPod IOS不想要做的是分配100,000個細胞, 因為如果你在列表頂端時,你是否真的需要分配內存 下來是99000行的單元格? 沒有,因為當你滾動,你可以種分配,當您去。 這樣做是為了你。 您不必擔心所有的愚蠢表現的東西。 你說的是你調用這種方法dequeueReusableCellWithIdentifier, 這說,沒關係,如果你需要,我會為你創建一個新的細胞。 但是,如果你在表的底部,你已經分配了一些細胞 在表的頂部,你真的不會需要很快 我給你一個,而不是分配一個新的, 所以這是一個不錯的性能問題。 您不必分配自己的細胞。 這將會給你回一個細胞。 這將返回給你一個單元格對象。 一旦你有你可以做的東西給它的單元格對象。 此屬性的文本標籤,您可以設置文本的單元格。 您可以添加在右邊的箭頭或其他一些隨機的東西 這個叫其他財產的accessoryType,等等等等。 讓我們來看看現在實際執行的表視圖。 當我創造了這個項目 而不是說單一視圖的應用程序其實,我這邊走了過來 主詳細的應用程序,基本上是這樣的郵件應用程序 在iPad上的表格視圖左側,然後在右邊的內容。 在iPod或iPhone上,這是對應於一個單一的表視圖。 這就是我得到了我的啟動代碼。 讓我們先來看看在情節串連圖板。 所有這一切都為我所做的,基本上創建的。 此導航欄給我看一個例子細胞可能看起來像, ,我可以雙擊,更改標題。 任何其他UI問題,我可以處理。 頭文件看起來真的很簡單。 與其說這是UIViewController的,我們現在說這是一個 TableViewController,所以我們知道我們想要調用的所有表的方法。 接下來,我想創建一個屬性的代表 我的表裡面的東西。 此表將任意顯示 水果的列表,所以我需要創建一些數組 我可以將水果。 我的執行文件的第一件事情裡面,我想要做的 我想確保我初始化數組。 我說的alloc初始化,創建我的果實陣列, ,我加入到它的4件事,其中之一是更有爭議比其他3。 而現在,我有一個數組大小為4。 我們不停地搖晃,CS50。 我現在有一個數組的大小為4。 現在,我要開始回答這些問題,而實際上, 當我創造了這個應用程序時,所有這一切都已經為我做的。 我沒有在表視圖中輸入的節數。 這是已經存在,而且我填補的空白。 我有多少段? 一。全部完成。 我有多少行? 嗯,我有一個行的每一個水果,所以這個數 說有多大的數組的屬性是什麼? 這是我有多少行。 最後,我需要說的每一個細胞看起來像什麼? 我要說dequeueReusableCellWithIdentifier。 同樣,這已經為我寫的。 我沒有這樣做我自己,我要回去 這種細胞在這個位置。 請記住,我們可以將這個同樣的方法對每一個細胞, 這種說法在這裡,這indexPath參數, 說行我 如果我說indexPath.row在這裡 這將是0,那麼這將是1,那麼它會是2,這是,所以我知道 我目前顯示什麼樣細胞。 我想設置文本的單元格使用此為textLabel屬性 裡面去我的果實陣列,並得到 對應於每行的對象。 如果這是一個字符串,我現在設置 text屬性設置為一個字符串。 我可以做的一件事。 我也註冊了一個事件處理程序的每個細胞, 所以,當我點擊每個單元格 這didSelectRowAtIndexPath,這是怎麼回事打電話給我, 通過簡單的定義,我現在可以處理發生了什麼 當你點擊一個單元格,再一次,我們通過細胞被竊聽 所以,我們可以重複使用相同的事件處理程序為我們所有的細胞。 再次,這是IOS是為我做的東西。 讓我們顯示另一個惱人的彈出 簡單地說,你挑的東西在那裡的東西 將是該行的對象。 當我運行這個,我要這個漂亮的表視圖 一排這些水果,如果我點擊 它告訴我發生了什麼事。 有意義嗎? 讓我們建立一個稍微複雜一點的應用程序, 盡可能多的點擊你選擇了番茄。 很好的情節串連圖板 是它的不只是單獨來幫助我們設計屏幕, 它也將幫助我們聯繫在一起,我們的整個應用程序, 所以最終的應用程序,我們將建立新聞閱讀器這是很好的運動, 等將有多個屏幕,這樣我就可以實際上代表 這些多個屏幕的故事情節, 我可以放大和我的應用程序從一個高的水平。 為了創建一個新的元素裡面我的故事板 其實很簡單,裡面的界面生成器。 如果我想添加另一個屏幕,例如, 我可以先縮小與蘋果喜歡這麼多的雙指縮放, 在這裡之前,我搜索一個按鈕 我和拖放一個按鈕 如果我要創建一個新的畫面,我可以實際上只是拖動和下降 整個視圖控制器,所以如果我挑了這個,把它在這裡, 嘿,還有另一個屏幕,所以現在使用同樣的故事板文件 我可以有我的應用程序內的所有的畫面,我可以縮小 看看它們如何相互作用。 這些還沒有互動。 這2個屏幕互動的方式,就是你定義的關係。 基本上你可以說這屏幕,當您按下此按鈕時, 我希望你能滑動到這個新的屏幕。 這意味著有這種關係  第一屏和第二屏。 你會基本上是一個箭頭,從該按鈕的第二個屏幕 他說,當你按下這個按鈕時,這就是我想要去的地方。 就像我們控制點擊和拖動來定義這些網點 我們要到做同樣的事情,定義這些segues的。 我們將看到一個例子,在我們實際過渡 從一個屏幕到另一個iOS是不夠好,調用此方法 被稱為prepareForSegue,這是我們可以開始 將數據從一個應用程序到另一個。 在這個例子中,我們將要看看它基本上允許我們 過濾棒球隊的聯賽和部門。 例如,當我選擇一個聯賽,我想過渡 我的下一個屏幕,在那裡我可以顯示所有的部門 該聯盟或所有不同的團隊。 我需要發送的隊伍,你應該顯示該屏幕。 要做到這一點,我要採取這種方法的好處在這裡。 最後,只是一個隨機點在iOS上。 如果你要存儲的數據是這東西叫做核心數據, 這實際上是一種複雜的工作。 您也可以使用SQL來存儲數據, 再次,是好的,但一種更複雜的一面工作, 但iOS也支持這些屬性列表非常酷的事情, 和財產清單僅僅是一個文件,該文件表示鍵值對。 您定義的鍵的列表,和你說,這個鍵是一個數組。 此鍵是一個字符串,基本上什麼可以做, 在JSON中,你可以做裡面的一個屬性列表, ,所以這真的很好,讓我們能有一些數據。 例如,我有這Teams.plist,我創建了。 我創建了一個新的plist文件,我可以向下鑽取。 這是一個字典,這是一個字典,這些都是字符串, 所以這是一個很好的圖形表示的JSON文件 或只是一組鍵值對, 所以這是,我會與我的應用程序內的數據。 讓我們先來這裡。我們現在有更多的文件。 不過,讓我們先來這裡的腳本。 其實,故事情節在這裡,如果我能縮小 現在我們可以看到,這是我的應用程序的流量。 我首先要在此屏幕上開始。 我要向下鑽取到這個屏幕, ,我會深入到這個屏幕,我們可以在這裡看到的,如果我種 移動這些後,我們可以從這裡到這裡的箭頭, 我定義箭頭的方式,如果我在一點點放大, 如果我過來到這個視圖控制器, 這裡是一個細胞,我想說的是,當你點擊一個細胞 我希望你能滑動到另一個屏幕。 我可以簡單地按住控制, 多一點點滾動,按住控制,拖動該單元格,並放手。 在這裡,我們說什麼的過渡要使用的呢? 你想使用該幻燈片的事情,這就是所謂的推嗎? 你想從下往上滑動嗎? 這就是所謂的模式。 當我點擊其中之一,它會為我作出這樣的箭頭, 這意味著,其實我已經會發生什麼,當我按下這個按鈕,圖形化的處理。 我沒有寫任何代碼就可以從一個屏幕上滑動到下一個。 我定義的界面生成器,這在視覺上內。 如果我點擊這個箭頭,我們可以看到,我給了這東西的名稱。 我把它叫做的showDivisions,這是使我可以知道 發生的轉變是什麼,我們就會明白為什麼在短短幾秒鐘之內。 這就是我在我的應用程序的不同屏幕有線。 如果這是一個按鈕,例如,而不是表視圖, 我可以控制的按鈕上單擊,拖動到下一個屏幕, 這就是我可以做導航的方式。 真的很快,如果我們到MasterViewController來, 再次,我們只是要定義的東西的清單 將顯示在表視圖。 在這裡,我說我要你把那個plist文件, 我希望你能加載它到一個字典, 一旦你有字典,我會再回答這些同樣的問題。 這裡的節數。 其中,有一排為每一個聯盟,每個單元格中的文本 應該是第一個,第一個聯賽,聯賽第二,等等。 最後,我要使用這種方法,我們只是看到了被稱為prepareForSegue, 這是方法,將被解僱,當我點擊 在那些行之一,因此激活該過渡 我設立的箭頭。 這是說,我可以有多個 從一個到另一個屏幕的關係。 如果我有2個按鈕,每個按鈕帶你到不同的畫面 我要為每個按鈕有2 segues,1。 但此prepareForSegue是,再次,要被重用 對於每個不同的關係,因此,這意味著,我需要一種方法 確定,如果按下第一個按鈕或按下第二個按鈕。 還記得當我給Segue公司的名稱,這showDivisions, 這就是我現在知道,這是SEGUE被激活。 我想要做的就是我想說的 我想弄清楚什麼我只是打, 等拿到,我可以說,我要為選定的行的indexPath, 記得indexPath只是說,我只是點擊, 然後我想說,我想弄清楚我要去的地方。 這的destinationViewController,這是一個財產的SEGUE。 這就是我要的畫面, 所以我知道我要的屏幕被稱為DivisionsViewController 因為我創造了這個類, 所以現在如果我說d.divisions 我現在設置的視圖控制器的屬性,我去。 這是我發送的數據從一個屏幕到另一個屏幕。 只要看看這DivisionsViewController的 你可以在這裡看到。h文件 還有就是物業部門,這就是我基本上填充, 所以這就是我知道我顯示對應的部門 我點擊的同盟,並再次, 實際的表視圖看起來幾乎是一樣的,只是回答這些 3個簡單的問題,以及確定 會發生什麼,當你移動到下一個屏幕。 只是一對夫婦,其他的東西在這裡。 您會發現在頂部,而不是在這裡說的#include 我現在說的#import。 這僅僅是一個Objective-C的東西。 的進口基本上是一個更好的版本包括, 例如,我們需要知道這個類是什麼, 這樣我就可以不只是說DivisionsViewController的。 如果我們不包括h​​ashtag standardio.c內。c文件 編譯器不知道printf的是什麼。 同樣,如果我不導入DivisionsViewController 編譯器真的不知道什麼DivisionsViewController的。 只要確保這裡面不同的m文件,確保導入的 對應的。h文件,使編譯器知道這是怎麼回事。 最後,什麼蘋果最終沒有被使用Web視圖顯示一些數據, 一個web視圖對象,在其中您可以嵌入 您的應用程序內部的一個小的web瀏覽器。 所有你需要做的是提供一個URL到您的網頁瀏覽器, 所以我想去mlb.mlb.com, 這是怎麼了,我可以訪問的主頁每個團隊, 通過此URL 的web視圖可以顯示這對我來說,我可以瀏覽周圍, 模擬器是在使用中的一個。 現在,這是從我的plist。 如果我點擊這個來自我的plist,滑動處理 定義這些segues。 我點擊一多, 現在這裡是我的UIWebView的,所以就像 這裡的網站,我只是嵌入式的URL, 我沒有處理什麼瘋狂的。 這是如何顯示的Web頁面。 之類的東西這回按鈕,在這裡也給我 完全免費的,因為我已​​經定義了這些關係segues。 有什麼問題嗎?是啊。 [學生]因此,當你使用alloc,你永遠不會有免費的什麼? 沒錯,當你調用alloc和init,你沒有釋放它。 IOS會為你處理所有這一切。 這是美妙的,而你沒有違反任何規則。是啊。 [學生]:如果你有更多的球隊,可以在屏幕上顯示, 它會自動有一個滾動的選項,或者是,你需要添加的東西嗎? 沒錯,如果我有更多的球隊,例如,它會自動處理 對我來說,所有的性能問題的滾動 巨大的表也完全為我處理。 其他問題嗎? 所有這些代碼將被發布。 我們種更微小的細節,掩蓋了一點點, 但諸如此類的web視圖設置一些屬性 只是事情,你可以通過瀏覽蘋果的文檔, 這是真的,真的很好的佈局。 他們有很多的示例應用程序和示例用法 不同的API,所以肯定細讀如果可以的話。 只是一些有用的鏈接,你可能想看一看。 這些都是一些有用的文檔指南。 網址是巨大的,所以他們縮短。 第一個是整個庫文件。 很少有搜索欄,所以如果你開始輸入按鈕 它會開始給你所有的信息,所有的事情,你可以用一個按鈕。 我還包含了表視圖編程指南“。 它可以處理更詳細的表視圖, 做這樣的事情如何動態地添加單元格或編輯單元格或刪除。 有大量的示例應用程序從蘋果公司會告訴你如何做到這一點, 終於,這最後一個是人機界面指南, 這是基本的UI組件的一些討論, 這樣的話不使一個按鈕,4個像素,4個像素。 這是一個壞主意,和其他的東西,蘋果想要你做的事 鼓勵良好的設計。 最後還有什麼問題之前,我們完成了嗎? 好了,肯定會覺得 - 我們有特殊的標籤上討論。 我們將有一個iOS之一,所以肯定會覺得自由利用這一點。 如果你想與你的同學對項目工作 或幫助找出一些隨機的iOS的東西 隨時給我發電子郵件,絕對仔細閱讀所有網上的代碼,因為 的利益的時候,我們只是在掩飾了一種更 細粒度細節的東西。 但是,如果沒有,那麼在您的iOS項目,好運氣,我希望我們能有 在App Store中的應用程序的大量湧入。 [CS50.TV]