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.mzph.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 — …

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.动画在诸如页面过渡,滚动事件,进入和退出组件以及应提醒用户的事件之类的…

线框模型_进行计划之前:线框和模型

线框模型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…

工作经验教训_在设计工作五年后获得的经验教训

工作经验教训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…

中文排版规则_非设计师的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…

reloaddata 跳动_纸跳动像素

reloaddata 跳动I would like to open with a problem.我想开一个问题。 Why are so many designer going straight to pixels?为什么这么多设计师直接使用像素? Over the past few years i’ve witnessed this in my team, my clients and others throughout th…

使用自定义RadioButton和ViewPager实现TabHost效果和带滑动的页卡效果。

参考自http://www.apkbus.com/android-86125-1-1.html 这篇文章技术含量一般,大家别见笑。源码我以测试,在底部可下载。 好了先上效果图: 以下是实现步骤: 1、准备自定义RadioButton控件的样式图片等,就是准…

利益相关者软件工程_改善开发人员团队与非技术利益相关者之间交流的方法

利益相关者软件工程Whether you’re working on a startup or a big company, keeping your stakeholders and non-technical partners engaged and up to date on what the tech team has been building can be hard.无论您是在初创公司还是大公司中工作,都要让您的…

响应式网格项目动画布局_响应式网格及其实际使用方式:常见的UI布局

响应式网格项目动画布局重点 (Top highlight)第二部分 (Part II) Now that you have a basic understanding of how to use grids, you might be wondering how to apply them to layouts you see on the web. Responsive grids are a method to systematically align your des…

时间轴ui设计_我应该在UI设计上花更多时间吗?

时间轴ui设计Let’s start with an example of communication skills: they are important for any profession, and you expect any professional to have a decent level. However, excellent communication skills won’t make up for the lack of core expertise. Imagine …