IPhone開發 用子類搞定不同的設備(iphone和ipad)

用子類搞定不同的設備

因為要判斷我們的程序正運行在哪個設備上,所以,我們的代碼有些混亂了,IFELSE去的,記住,將來你花在維護代碼上的時間要比花在寫代碼上的時間多,如果你的項目比較大,且IF語句分布得到處都是,那么可以悲催地告訴你,你將在跟蹤iPadiPhone的功能上面花更多的時間,更大的精力。

????在下面的建議中,我們不是針對iPad,而是要建立一種用傳統的包裝技巧來提取類、封裝方法的思路和習慣,這樣不但會減少那些個啰哩啰嗦的條件判斷,還能使代碼結構更加清晰。

????例如,一個更加明智的方法就是把你的類分成三個不同的類別,把那些兩個設備共用的代碼放在共享類別中,把iPhone相關的代碼放在iPhone類別中,把iPad相關的代碼放在iPad類別中,在本節結束的時候,我們的源代碼結構將變成下圖這樣:
iPad程序設計--第二章:分割視圖(2)

????首先考慮RootViewController,這其中,我們只修改了表視圖代理的tableView:didSelectRowAtIndexPath:方法的實現,以讓它是適應于不同的設備,現在,我們就從RootViewController類中干掉它,然后創建兩個子類實現它。

????創建一個RootViewController的子類,起名為RootViewController_Pad,頭文件里面幾乎沒啥東西:
iPad程序設計--第二章:分割視圖(2)

????實現起來也很簡單,在這里面我們將針對iPad實現代理方法,如果喜歡偷懶,就從RootViewController.m中把iPad對應的代碼復制、粘貼過來:
iPad程序設計--第二章:分割視圖(2)

????接著,我們用類似的方法針對iPhone創建RootViewController_Phone子類,不用說,該子類的爸爸也是RootViewController類。
iPad程序設計--第二章:分割視圖(2)

????自然,其中代理方法實現的是iPhone功能,我們繼續發揚復制、粘貼的精神,從RootViewContoller.mtableView:didSelectRowAtIndexPath:方法中摘出iPhone對應的代碼:
iPad程序設計--第二章:分割視圖(2)

????通過子類化RootViewController,我們沒費多大勁就把iPadiPhone的功能分離開來,從RootViewController.m中刪除tableView:didSelectRowAtIndexPath:方法。如此,超類中包含了所有表視圖的數據源方法,而針對具體設備的功能方法,都被放在了子類中,從而實現了數據與功能的分離。

????不過,事兒還沒有干完,程序還不知道這些子類的存在,我們還要把應用代理切成iPad份和iPhone份,并讓他們分別調用相應的子類。

2.5?????把應用代理分開

?????為了調用上面的子類,我們還要做一些改動,那就是針對不同的平臺創建不同的應用代理,在超類DailyShootAppDegelate中保留這些設備共用的代碼,其頭文件如下:
iPad程序設計--第二章:分割視圖(2)

????在實現文件中,干掉那些判斷目標設備的代碼,稍后,我們將添加子類的初始視圖,DailyShootAppDegelate.m的內容如下:
iPad程序設計--第二章:分割視圖(2)

????創建一個DailyShootDegelate_Phone類,其頭文件內容如下:
iPad程序設計--第二章:分割視圖(2)

????對于iPhone,我們要添加導航控制器的視圖,一添加進來它就會在最上面顯示,然后,還要調用超類的application:didFinishLaunchingWithOptions方法:
iPad程序設計--第二章:分割視圖(2)

????類似的,再創建DailyShootAppDegelate_Pad類,其頭文件內容如下:
iPad程序設計--第二章:分割視圖(2)

????在這個子類中,需要添加一個分割視圖控制器(UISplitViewController)屬性,在實現中,我們將把分割視圖控制器的視圖作為頂部視圖添加進來,并在dealloc方法中釋放資源:
iPad程序設計--第二章:分割視圖(2)

????到現在,工作基本完成,不過先別著急,我們還需要對nib文件做少許修改。在IB中打開MainWindow.nib,用實體查看器把DailyShootAppDegelate對象的類型改為DailyShootAppDegelate_Phone,把RootViewController對象的類型改為RootViewController_Phone
iPad程序設計--第二章:分割視圖(2)

????類似的,在IB中打開MainWindow_iPad.nib,用實體查看器把DailyShootAppDegelate對象的類型改為DailyShootAppDegelage_Pad,把RootViewController對象的類型改為RootViewController_Pad
iPad程序設計--第二章:分割視圖(2)

????保存所有成果,生成并運行,所有的東西將如以往那般運行。

????為了替換兩個簡單的if語句我們就做了這么多事情,是不是感覺很磨嘰?但是,凡事要朝好的方向想,你的代碼是不是變得清晰靈活了?其實,你也許感覺做這些修改也沒有費多少時間,但是,這么做確實很重要。

2.6?????在詳細視圖中添加一個工具條

下一步,讓我們在iPad中被AssignmentViewController管理的詳細視圖的頂部添加一個工具條,豎著使用iPad時,為了隱藏和顯示導航視圖,我們的確需要一個工具欄放置“導航”按鈕;即使在橫屏下,留著它也挺好,因為,有時候隱藏掉導航視圖會使界面更清晰。iPhone版本的界面已經有個導航條,所以不用理會它。

我們要創建一個iPad版的AssignmentViewController,選擇“iPad組”,創建新文件,該文件是UIViewController的子類,記著選中“針對iPad”、“創建XIB”兩個復選框,且將新類命名為AssignmentViewController_Pad

????AssignmentViewController_Pad類添加名為toolbar的公共屬性,其類型為UIToolbar,把超類從通用的UIViewController改為AssignmentViewController
iPad程序設計--第二章:分割視圖(2)

????打開AssignmentViewController_Pad nib,在視圖的頂部放一個UIToolbar,剩下的部分用UIWebView填充,把工具條上的默認按鈕干掉,待會我們創建自己的按鈕。在UIWebView對象的屬性查看器中,把“Scales Pages”的值設置為“Fit”,從“Files’Owner”中把兩個外部接口與這些元素相連,保存。

????現在,在AssignmentViewController_Pad類的實現文件中就沒有多少事情要做了:
iPad程序設計--第二章:分割視圖(2)

????下面,我們要對MainWindow_iPad.nib做一些調整,用實體查看器把AssignmentViewController對象的類型改為AssignmentViewController_Pad,接著,還要用屬性查看器把NIB名稱改為AssignmentViewController_Pad,別忘了保存。

????好了,運行運行,看看工具條是不是出來了,下面我們將在分割視圖(橫屏)和懸浮窗體(豎屏)中使用工具條。

轉載于:https://www.cnblogs.com/zhwl/archive/2013/01/05/2846213.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274397.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

見證開戶_見證中的發現

見證開戶Each time we pick up a new video game, we’re faced with the same dilemma: “How do I play this game?” Most games now feature tutorials, which can range from the innocuous — gently introducing each mechanic at a time through natural gameplay — …

使用JXL組件操作Excel和導出文件

使用JXL組件操作Excel和導出文件 原文鏈接:http://tianweili.github.io/blog/2015/01/29/use-jxl-produce-excel/ 前言:這段時間參與的項目要求做幾張Excel報表,由于項目框架使用了jxl組件,所以把jxl組件的詳細用法歸納總結一下。…

facebook有哪些信息_關于Facebook表情表情符號的所有信息

facebook有哪些信息Ever since worldwide lockdown and restriction on travel have been imposed, platforms like #Facebook, #Instagram, #Zoom, #GoogleDuo, & #Whatsapp have become more important than ever to connect with your loved ones (apart from the sourc…

M2總結報告

團隊成員 李嘉良 http://home.cnblogs.com/u/daisuke/ 王熹 http://home.cnblogs.com/u/vvnx/ 王冬 http://home.cnblogs.com/u/darewin/ 王泓洋 http://home.cnblogs.com/u/fiverice/ 劉明 http://home.cnblogs.com/u/liumingbuaa/ 由之望 http://www.cnbl…

react動畫庫_React 2020動畫庫

react動畫庫Animations are important in instances like page transitions, scroll events, entering and exiting components, and events that the user should be alerted to.動畫在諸如頁面過渡,滾動事件,進入和退出組件以及應提醒用戶的事件之類的…

Weather

public class WeatherModel { #region 定義成員變量 private string _temperature ""; private string _weather ""; private string _wind ""; private string _city ""; private …

線框模型_進行計劃之前:線框和模型

線框模型Before we start developing something, we need a plan about what we’re doing and what is the expected result from the project. Same as developing a website, we need to create a mockup before we start developing (coding) because it will cost so much…

撰寫論文時word使用技巧(轉)

------------------------------------- 1. Word2007 的表格自定義格式額度功能是很實用的,比如論文中需要經常插入表格的話, 可以在“表格設計”那里“修改表格樣式”一次性把默認的表格樣式設置為三線表,這樣, 你以后每次插入的…

工作經驗教訓_在設計工作五年后獲得的經驗教訓

工作經驗教訓This June it has been five years since I graduated from college. Since then I’ve been working as a UX designer for a lot of different companies, including a start-up, an application developer, and two consultancy firms.我從大學畢業已經五年了&a…

Wayland 源碼解析之代碼結構

來源:http://blog.csdn.net/basilc/article/details/8074895 獲取、編譯 Wayland 及其依賴庫可參考 Wayland 官方網站的 Build 指南:http://wayland.freedesktop.org/building.html。 Wayland 實現的代碼組成可以分成以下四部分: 1. Wayland…

中文排版規則_非設計師的5條排版規則

中文排版規則01僅以一種字體開始 (01 Start with only one font) The first tip for non-designers dealing with typography is simple and will make your life much easier: Stop combining different fonts you like individually and try using only one font in your fut…

基本響應性的Web設計測試工具

在重新設計頁面的過程中。要使頁面完全響應的設計(這意味著它會重新調整大小根據瀏覽器的尺寸和方向)。如iPhone和iPad的移動電話和平板電腦我碰到了一些非常方便的響應設計工具,幫我測試網站在不同的屏幕響應。下面的這些響應的網頁設計工具…

ux設計_聲音建議:設計UX聲音的快速指南

ux設計Mating calls, warning grunts, and supportive coos are some of the sounds heard throughout the animal kingdom. All species use finely-tuned noises to communicate to one another and inform others of an action or behavior. We humans aren’t all that dif…

css3高級和低級樣式屬性先后順序

寫css hack 時,由于hack主要針對的是個別瀏覽器,hack的書寫順序應當是從一般到特殊的寫法。 如: .box { width:200px; height:200px; position:fixed; left:0; top:0; _position:absolute; } 如果顛倒順序,從特殊到一般&#xff0…

sans serif_Sans和Serif相遇可愛

sans serifI first noticed it in this tweet. Exciting upcoming product and snazzy motion work aside, “What a fascinating logotype!”, I exclaimed!我在此推文中首先注意到了它。 我驚呼即將推出的激動人心的產品和令人眼花,亂的動作,“多么迷人…

[ckeditor系列]ckeditor 自己寫的一個簡單的image上傳js 運用iframe的ajax上傳

ckeditor最近修改一個上傳的,原來的Image的上傳插件功能很多,但是自己用,沒有必要,就進行了修改,后來就改成了目前的樣子,根據_samples/api_dialog.html 進行了修改,把頁面里面的調用都進行了修…

sql 避免除0錯誤_設計簡歷時避免這3個常見的UX錯誤

sql 避免除0錯誤重點 (Top highlight)Having a great looking resume on hand is very important when you’re looking for a job. It is your ticket to land the interview that will get you one step closer to that one job you’ve been dreaming of.在找工作時&#xf…

一個網站自動化測試程序的設計與實現

CSDN博客不再經常更新,更多優質文章請來 粉絲聯盟網 FansUnion.cn! (FansUnion) 代碼 下載地址:http://download.csdn.net/detail/fansunion/5018357(免積分) 代碼亮點:可讀性很好,注釋詳盡 背景 工作中,在維護一…

如何編寫數據庫可視化界面_編寫用于數據可視化的替代文本

如何編寫數據庫可視化界面什么是替代文字 (What is Alt Text) Alt text (sometimes called Alt tags or alternative text) are written descriptions added to images that convey the meaning of the visual. Good alt text helps more people understand the content. Assis…

(轉)swc與swf的區別

在Flash Builder中用Actionscript寫的類可以打包成swc或swf, 在Flash CS中制作的元件也可以打包成swc或swf文件, 一個swc或swf文件中可以包含多個類或元件, 每個元件會映射成一個類, 因此,在Flash Builder中的類和在Fl…