让我们开始使用Xcode 吧。首先创建一个简单的iOS 应用程序,然后将它连在一起。如果对Mac 开发更感兴趣,不用担心,同样的技术仍然适用。 这个示例应用程序将显示单个按钮,在点击它时,会弹出一条警告,并将按钮的标签改为“Test!”。我们将继续使用前面创建的项目,所以请确保那个项目是打开的。一般来说,先设计界面,然后再添加代码,这是一种好的程序设计实践。这意味着在编写代码时,已经理解了这些代码是如何与用户所见内容相对应的。 因此,我们将首先设计应用程序的界面。 1.3.1 设计界面 在使用Cocoa 和Cocoa Touch 生成应用程序界面时,有两个选项。一个选项是在故事板(storyboard)中设计应用程序的屏幕,故事板显示了所有屏幕是如何链接在一起的。另一个选项是分别设计各个屏幕。本书将在后面更详细地介绍故事板,就目前来说,我们编写的这个应用程序只有一个屏幕,所以选择哪种方式都没有太大关系。 首先打开界面文件,并添加一个按钮。下面是需要遵循的步骤。 (1) 首先打开故事板。因为新创建的项目在默认情况下使用故事板,所以这个App 的界面存储在Main.storyboard 文件中。 在项目导航器中选择该文件,将其打开。编辑器将会发生变化,显示此应用程序的单个、空白屏幕。 (2) 下面拖入一个按钮。接下来,向屏幕上增加一个按钮。所有用户界面控件都保存在对象库(object library)中,它在屏幕右侧实用工具窗格的底部。为找到该按钮,可以在列表中滚动,直到找到Button,或者在这个库底部的查找字段中键入“button”。 找到它之后,将它拖到屏幕中。 (3) 这时,需要对按钮进行配置。添加到界面中的每一项都是可以配置的。就目前来说,我们将只修改其标签。 单击这个新按钮,选中它,然后选择Attributes Inspector(属性检查器),它是实用工具窗格顶端右数第三个选项卡。按下Command-Option-4 按钮也可以找到它。将这个按钮的Title(标题)改为“Hello!”。 在界面中双击按钮也可以修改其标题。 这个简单的界面现在已经完成了(如图1-9 所示)。唯一还没有完成的事情就是将它连接到代码。 图1-9:完成后的简单界面 1.3.2 连接代码 应用程序并不只是界面——作为开发者,还需要编写代码。为了使用前面设计的界面,需要在代码和界面之间建立连接。 我们可以建立两种连接。 输出口(outlet)是一些变量,用来引用界面中的对象。利用输出口可以命令一个按钮改变颜色或大小,或者隐藏它自己。Interface Builder 中还有一些输出口集合(outletcollection),可以用它来创建一组输出口,并选择其中包含哪些对象。 操作(action)是代码中的一些方法。当用户与对象交互时,将运行这些方法以作回应。这些交互包括用户用一根手指触碰一个对象、拖动一根手指,等等。为使应用程序的行为与我们前面的描述保持一致——点击按钮显示标签,并改变按钮的文本,我们既要用到输出口,又要用到操作。操作将在单击按钮时运行,它使用连接到按钮的输出口来修改按钮标签。 要创建操作和输出口,需要同时打开界面编辑器和它的相应代码。然后按住Control 键不放,将一个对象从界面编辑器拖到代码中(如果希望在界面中的两个对象之间建立连接,就将它拖到界面编辑器中的另一个对象上)。 现在将创建必要的连接。 (1) 首先,打开助理编辑器。为此,在工具栏中选择编辑器选择器中的第二个选项卡。助理编辑器应当显示界面的相应代码ViewController.swift。如果未显示,则单击交织在一起的圆圈图标(此图标表示助理编辑器),并导航到Automatic → ViewController.swift。如果正在使用OS X 10.9 Mavericks,助理编辑器按钮看起来像是一件无尾礼服,而不是一对圆圈。 (2) 创建这个按钮的输出口。按住Control 键不放,从按钮拖到代码中第一个“{”下方。这时将出现一个弹出窗口。所有内容都保持默认设置,但将Name 改为“helloButton”。单击Connect。 这时将出现一行新代码:Xcode 已经为我们创建了连接,它作为类的一个属性出现在代码中。 (3) 创建这个按钮的操作。按住Control 键不放,从按钮拖到刚刚创建的那行代码之下的空间中。此时将会再次出现一个弹出窗口。 这一次,将Connection 由Outlet 改为Action。将Name 设置为showAlert。单击Connect。这时将出现第二行新代码。Xcode 已经创建了连接,它是ViewController 类内部的一个方法。 (4) 在刚刚创建的showAlert 方法中,添加以下新代码: @IBAction func showAlert(sender: AnyObject) { var alert = UIAlertController(title: "Hello!", message: "Hello, world!", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) self.helloButton.setTitle("Clicked", forState: UIControlState.Normal) } 此代码创建了一个UIAlertController,它在一个弹出窗口中向用户显示一条消息。为了做准备,它将窗口的标题改为“Hello!”,将窗口中的文本改为“Hello, world!”,然后向用户显示这一警示消息。最后,增加一个带有文本“Click”的操作(在本例中,它所做的就是让这条警示消息消失)。它随后将按钮的标题设定为“Clicked”。应用程序现在已经做好运行的准备了。单击左上角的Run 按钮。应用程序将会在iPhone模拟器中启动。 如果碰巧在计算机上连接了一个iPhone 或iPad,Xcode 在默认情况下将会尝试在该设备中启动此应用程序,而不是在模拟器中启动。为了让Xcode 使用模拟器,可进入窗口左上角的Scheme 菜单,将当前选择的方案改为模拟器。 当App 在模拟器中完成启动时,点击按钮。这时将会出现一条警示消息;在关闭它时,会发现按钮的文本已经发生了变化。