你是一位熟悉另一平台,希望开始 IPhone 开发(从而接触 Objective-C)的软甲开发者?不久之前的我就处于如此境地,而且坦率的说,由于日常工作的需求,我远离开发很久了。
在两年之后,我已经创造了很多 iPhone 和 iPad 的应用。正如我的学习过程千辛万苦,我希望你能够从我所经受的磨难中获得一些益处。
本教程针对有开发经验的读者。假定你分得出 while loop 同 fruit loops 的区别,以及 debug 同 ladybug 的区别!如果你对编程完全陌生,你可以先看看 给高中学生的 iOS 书 系列。
此教程的目标是通过 Objective-C 的基础内容,给予你一些信心。不同于“让我们分析一下语法的每个片段”的做法,你将得到实践和工作实例。这样,当需要更进一步时,你能够更容易的查阅参考(类似 这种)。
在此教程中,你将创建一个从储存的列表中随机抽取格言的简单应用。在此过程中,你将能够熟悉 Objective-C 的某些部分,包括:
我需要先警告你——使用 Objective-C 进行 iPhone 开发的过程很有趣,你可能会有些上瘾。做好放弃一些睡眠,家务堆积的心理准备!:]
在开始前,先确认你拥有一个苹果开发者账号,并配置完毕,同时安装了最新版的 Xcode (你可以在 Mac App Store)免费下载。
如果都准备好了,I will (Objective) C-you after the jump! :]
凡事有先后:创建一个 Xcode 项目。这篇教程以 Xcode 4.5+ 和 iOS 6+ 环境为基础——如果你的 Xcode 版本较老,要不然升级,要不然改看本教程 iOS 6 之前的版本。
启动 Xcode 并通过 iOS\Application\Single View Application (单视图应用)模板创建一个新项目。
键入 QuoteGen 作为项目名称,将设备家族设为 iPhone,确认 Use Automatic Reference Counting 和 Use Storyboards 被点选(且其它复选框未点选)。然后就可以点击下一步并选择项目保存路径了。
你可以看到,你的项目中自动创建的文件有: AppDelegate.h,AppDelegate.m,ViewController.h 以及 ViewController.m 。同时还有 MainStoryboard.storyboard。
AppDelegate 包含初始化应用的代码。在此教程中,你只需要知道这些。下面是你需要应对的文件的简要说明:
注意:在 Xcode 中创建界面有两种方法——使用 Storyboards 或 Xcode Interface Builder files (XIBs)。每个方式都很好用,在这篇教程里我们将使用 Storyboards,这是现在最流行的方式。不过两种方法非常相似——只要了解了一种,即可触类旁通。
关于 Storyboards 的更多信息,请在之后参阅 此教程。
首先你要做的事情就是为在此应用中显示的摘引建立几个变量——普通摘引和视频相关摘引。
为此,你需要创建两个 Objective-C 属性。关于属性有一些微妙之处,但现在你只需要将其视为为你的类创建变量的方式。
创建属性很容易——让我们通过为摘引数组创建属性示例。在 ViewController.h 文件中 @interface 和 @end 行之间加入下面一行:
@property (nonatomic, strong) NSArray *myQuotes;
让我们一点点分解它:
通过添加这一行,你有了一个这个类可以读取和设置的变量!
注意:在过去,在创建属性之后你还需要 @synthesize 处理,而在更早的过去,你还需要手动声明你的实体变量。这一切现在都不必再做了——现在你只需要一行代码,即可添加一个属性。
同样在过去,你需要自己处理所有的内存管理,但通过新的名为 Automatic Reference Counting (ARC) 的特性,这个过程变得自动化了。阅读更多 ARC 相关,参阅 此教程.
我是不是因为知道这一切泄露了我的年纪了? :]
这个应用也将保存一些电影中的名言。因此你需要创建第二个数组:
@property (nonatomic, strong) NSMutableArray *movieQuotes;
现在,你可以将你最喜欢的名言保存在 myQuotes 数组中了。你将在 viewDidLoad 中完成这一步,此方法在视图(屏幕)第一次被创建时被调用
在 viewDidLoad 的 [super viewDidLoad]; 一行后添加下面的代码。你可以添加你喜欢的名言。这是一项“体力活”,我们可以只加几个数组项。
// 1 - Add array of personal quotes self.myQuotes = @[ @"Live and let live", @"Don't cry over spilt milk", @"Always look on the bright side of life", @"Nobody's perfect", @"Can't see the woods for the trees", @"Better to have loved and lost then not loved at all", @"The early bird catches the worm", @"As slow as a wet week" ];
很好——现在你的名言数组已经准备就绪。是时候添加随机显示名言的代码了。
你还没创建用户界面,但要做的话,你需要添加一个文本框来显示名言,一个按钮点击获取随机名言。
为了显示一个随机名言在屏幕上,你需要两件事情-一个文本框的引用来设置文本,和按钮被点击的通知。
但是你如何把界面上的事情和代码关联起来?通过两个关键字 – IBOutlet 和 IBAction!
让我们看看它们怎么工作,先看看IBOutlet。在ViewController.h 数组下面添加下面的代码:
@property (nonatomic, strong) IBOutlet UITextView *quoteText;
这里你像之前一样声明了一个属性(UITextView类型的),但你用一个特殊的关键字标记它 – IBOutlet.
IBOutlet 意味着 quote_text 是一个可以链接到XIB文件的一个界面元素的对象。这样view controller 就可以通过这个属性访问(修改)那个界面元素了。 这样, 我们将设置这个UITextView显示的文本,但你也可以轻松的修改它的颜色,字体,大小,等等。
下来,在属性列表的后面添加下面的代码:
- (IBAction)quoteButtonTapped:(id)sender;
如果你有超过一个的参数,你应该重复步骤3-5。在Objective-C命名方法的语法有点奇怪,但你习惯了就会喜欢上它。
下来,切换到 ViewController.m 文件去添加quoteButtonTapped:的实现。在文件的结尾处(但要在@end之上)添加下面的代码 :
-(IBAction)quoteButtonTapped:(id)sender { // 1 - Get number of rows in array int array_tot = [self.myQuotes count]; // 2 - Get random index int index = (arc4random() % array_tot); // 3 - Get the quote string for the index NSString *my_quote = self.myQuotes[index]; // 4 - Display the quote in the text view self.quoteText.text = [NSString stringWithFormat:@"Quote:\n\n%@", my_quote]; }
现在为了真正的在屏幕上显示名言,你需要把这个类的文本框的outlet链接到你的XIB文件的一个文本框界面元素。
让我们看看怎么做, 打开 MainStoryboard.storyboard. 下来,查看Xcode窗口的右边侧边栏。如果你看不到,你需要点击上面工具栏中“Views”这一区中的最右边的按钮,来显示右边的侧边栏。
右边的侧边栏的下半部分有四个tabs,你可以点击相应的图标来切换tab,我们现在要切换到 Object Library.
从 Object Library 拖拽一个文本框(Text View)和一个圆角矩形按钮(Round Rect Button)到我们的view上。按照自己的喜好把它们放好位置。在按钮上加一个标题,例如“名言”。如果喜欢还可以改变一下控件的颜色和字体。你可以通过右边侧边栏的上半部分改变控件大部分属性,它也有好几个可以切换的tab - 我们最常用的是用来定制控件外观的 Attributes Inspector tab.
因为这个文本框只是用来显示,所以要取消 Behavior 中的 Editable 复选框.
现在你需要链接这个按钮和文本框到你之前在类中设置好的outlet和action。
按着control键,鼠标左键点击左边侧边栏的View Controller,然后拖拽到中间的文本框,然后释放鼠标左键,会弹出一个弹出菜单,选择其中的“quoteText”.
另外的一种方式是,你可以先选中左边栏的view controller,然后点击右边栏上面图标,切换tab到 Connections Inspector tab. 然后就可以看到你的View Controller的所有可用的链接,然后拖拽“quoteText”到中间文本框。
请记住,Storyboard之所以知道你的quoteText属性,是因为你之前添加的IBOutlet关键字!
评论删除后,数据将无法恢复
评论(1)