在代码中创建的iOS应用
本文探讨了如何创建iOS应用程序完全在代码中使用Visual Studio。它显示了如何从一个空项目模板UIKit的意见创建一个层次来构建应用程序在控制器屏幕。然后,它讨论了如何创建自定义视图,可以装入一个控制器。
1。概观
iOS的用户界面,视图和控制器的组合构建。视图用于以分层的方式构建用户界面。这些视图层次树可以构造在Xcode,Interface Builder创建厦门国际银行或故事板。此外,Xamarin工作室的设计师可以在OS X上创建故事板为基础的用户界面,但是,目前在Visual Studio的用户界面,只能在代码中创建。你只是为设计师的支持,虽然切换到OS X的选项。无论如何,是否要完全在Visual Stduio,或者你用设计师从OS X,它是如何工作完全是在代码中有一个基本的了解。本文介绍一些基本点起床和运行代码唯一的用户界面开发。
2。创建代码只有项目的
2.1。 iOS的空项目模板
让我们创建一个iOS项目在Visual Studio中使用的iPhone空的项目模板,如下图所示,我们将扩展添加控制器和视图。
空项目模板的项目增加了3个文件:
•AppDelegate.cs - UIApplicationDelegate包含一个子类,AppDelegate中,这是用来处理来自iOS应用程序事件。创建应用程序窗口AppDelegate中的FinishedLaunching方法。
•Info.plist中 - 财产清单文件,其中包含应用程序的配置信息。
•Main.cs - 包含指定的AppDelegate类的应用程序,它的切入点。
2.2。创建一个窗口
iOS应用程序是使用MVC模式构建。的第一个屏幕显示的应用程序从Windows的根视图控制器创建。 MVC模式本身的更多详细信息,请参阅多屏蔽应用程序文件。
的AppDelegate模板添加实现创建应用程序窗口,其中只有一个为每个iOS应用程序,并使其可见用下面的代码:
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { // create a new window instance based on the screen size window = new UIWindow(UIScreen.MainScreen.Bounds); // make the window visible window.MakeKeyAndVisible(); return true; }
这将产生一个空白的屏幕,在模拟器上,如下图所示:
2.3。添加控制器
让添加控制器由创建一个UIViewController实例,将它设置为的window.RootViewController属性的窗口:
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { // create a new window instance based on the screen size window = new UIWindow(UIScreen.MainScreen.Bounds); controller = new UIViewController(); controller.View.BackgroundColor = UIColor.White; window.RootViewController = controller; // make the window visible window.MakeKeyAndVisible(); return true; }
每个控制器都有一个相关的观点,这是从“查看属性访问。上面的代码改变视图的所以的BackgroundColor属性的UIColor.White的,这将是可见的,如下所示:
RootViewController的这种方式,包括控制器UIKit的,以及那些我们自己写,我们可以设置任何UIViewController子类。例如,下面的代码将作为RootViewController的UINavigationController的:
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { // create a new window instance based on the screen size window = new UIWindow(UIScreen.MainScreen.Bounds); controller = new UIViewController(); controller.View.BackgroundColor = UIColor.White; controller.Title = "My Controller"; navController = new UINavigationController(controller); window.RootViewController = navController; // make the window visible window.MakeKeyAndVisible(); return true; }
这将产生嵌套在导航控制器的控制器,如下图所示:
2.4。创建一个视图控制器
现在,我们已经看到了如何添加控制器RootViewController的窗口,让我们来看看如何创建自定义视图控制器代码。
添加一个新类名为CustomViewController如下所示:
应该继承这个类的UIViewController,这是在MonoTouch.UIKit命名空间,如下所示:
using System; using MonoTouch.UIKit; namespace CodeOnlyDemo { class CustomViewController : UIViewController { } }
2.5。初始化视图
UIViewController中有一个方法叫viewDidLoad中的观点是在内存中后,被称为。这是一个合适的地方的观点做初始化,如设置它的属性。
例如,下面的代码改变视图的背景颜色为灰色:
using System; using MonoTouch.UIKit; namespace CodeOnlyDemo { class CustomViewController : UIViewController { public override void ViewDidLoad() { base.ViewDidLoad(); View.BackgroundColor = UIColor.Gray; } } }
要加载此控制器,实例化它,将它设置为窗口的RootViewController的AppDelegate中,前:
controller = new CustomViewController(); window.RootViewController = controller;
现在,当应用程序加载,加载CustomViewController显示灰色的看法:
2.6。建立视图层次
创建一个视图控制器,我们现在可以开始在代码中创建一个用户界面。 iOS的用户界面是由视图层次结构。要添加额外的意见,如标签,按钮,滑块,等我们添加一些父视图的子视图的这些意见。
例如,让我们做一个登录屏幕,用户可以在其中输入用户名和密码。屏幕将包括两个文本字段和一个按钮。
2.6.1。添加文本字段
首先,我们将添加的用户名创建并初始化一个UITextField控制,然后将它添加到视图层次结构,如下图所示:
class CustomViewController : UIViewController { UITextField usernameField; public override void ViewDidLoad() { base.ViewDidLoad(); View.BackgroundColor = UIColor.Gray; float h = 31.0f; float w = View.Bounds.Width; usernameField = new UITextField { Placeholder = "Enter your username", BorderStyle = UITextBorderStyle.RoundedRect, Frame = new RectangleF(10, 10, w - 20, h) }; View.AddSubview(usernameField); } }
当我们创建的UITextField,我们设置的的帧属性来定义其位置和大小。在iOS0,0坐标在左上角+ X的权利和+ Y下来。随着一对夫妇的其他属性设置框架后,我们调用View.AddSubview添加UITextField的视图层次。这使得usernameField的UIView的实例,查看属性引用一个子视图。与Z-阶高于其父视图的一个子视图添加,所以它会出现在屏幕上与父视图前面。
的UITextField的应用程序如下图所示:
我们可以添加一个UITextField密码以类似的方式,只是这一次我们设置SecureTextEntry的属性设置为true,如下图所示:
passwordField = new UITextField { Placeholder = "Enter your pasword", BorderStyle = UITextBorderStyle.RoundedRect, Frame = new RectangleF(10, 45, w - 20, h), SecureTextEntry = true }; View.AddSubview(passwordField);
设置SecureTextEntry=真正隐藏的UITextField由用户输入的文本,如下所示:
2.6.2添加按钮
接下来,我们将添加一个按钮,以便用户可以提交的用户名和密码。 ,作为一个参数传递给它的父视图的AddSubview的方法再次被添加到视图层次像任何其他控制按钮。
下面的代码添加按钮注册一个事件处理程序的TouchUpInside事件:
submitButton = UIButton.FromType(UIButtonType.RoundedRect); submitButton.Frame = new RectangleF(10, 90, w - 20, 44); submitButton.SetTitle("Submit", UIControlState.Normal); submitButton.TouchUpInside += delegate { Console.WriteLine("Submit button clicked"); }; View.AddSubview(submitButton);
有了这个地方登录屏幕现在看起来如下所示:
2.7。处理旋转
然而,如果用户旋转设备,景观,对照组不调整适当的,如下面的截图所示:
解决这个问题的方法之一是每个视图设置autoresizingMask属性。在这种情况下,我们要控制水平伸展,所以我们设置每个AutoresizingMask作为:
AutoresizingMask = UIViewAutoresizing.FlexibleWidth
现在,当我们旋转设备或模拟器,一切延伸到填充额外的空间,如下所示:
2.8。iPhone5的大小
虽然应用在iPhone5将正常工作,它不会填满整个画面,在iPhone 5的模拟器或设备上运行时,如下图所示:
为了解决这个问题,我们只需要包括一个640x1136的图像名为Default-568@2x.png的。我们可以添加从项目属性,在Visual Studio。在项目属性中,选择iOS应用和滚动启动图像部分:
在启动图片选择的Retina显示屏(4英寸)的图像占位符,在“打开”对话框中选择一个640x1136的图像:
选择图像后,显示其预览在启动图像部分:
此外,它被添加到资源文件夹下的项目:
现在,当我们运行的应用程序,它填补了屏幕,如下图所示:
3。创建自定义视图
除了使用UIKit中的一部分的控制,自定义视图也可以被使用。从UIView继承和压倒一切的抽奖,可以创建自定义视图。让我们创建一个自定义视图,并把它添加到视图层次来证明。
3.1。继承从UIView
我们需要做的第一件事是创建一个类的自定义视图。为此,我们将使用类模板在Visual Studio中添加一个空类名为CircleView的。应该设置UIView的召回在MonoTouch.UIKit命名空间的基类。我们还需要System.Drawing命名空间。其他的各种系统。*命名空间将不会被使用在这个例子中,可以随意将其删除。
类应该看起来像这样:
using System; using System.Drawing; using MonoTouch.UIKit; using MonoTouch.CoreGraphics; namespace CodeOnlyDemo { class CircleView : UIView { } }
3.2。绘制一个UIView
每一个UIView的Draw方法被调用时,系统需要绘制。平局不应该被直接调用。这就是所谓的由系统在运行过程中的循环处理。在第一时间通过运行循环后视图被添加到视图的层次,其绘制方法被调用。后续调用绘制时发生的观点被标记为需要通过调用要么SetNeedsDisplay的或SetNeedsDisplayInRect的视图绘制。
我们可以添加我们的观点,加入这样的代码里面的重写Draw方法绘图代码如下所示:
public override void Draw(RectangleF rect) { base.Draw(rect); //get graphics context using (CGContext g = UIGraphics.GetCurrentContext()) { //set up drawing attributes g.SetLineWidth(10); UIColor.Green.SetFill(); UIColor.Blue.SetStroke(); //create geometry var path = new CGPath(); path.AddArc(Bounds.GetMidX(), Bounds.GetMidY(), 50, 0, 2.0f * (float)Math.PI, true); //add geometry to graphics context and draw it g.AddPath(path); g.DrawPath(CGPathDrawingMode.FillStroke); } }
由于CircleView是一个UIView,我们还可以设置UIView的属性。例如,我们可以在构造函数中设置的BackgroundColor:
public CircleView() { BackgroundColor = UIColor.White; }
要使用我们刚刚创建的CircleView,我们可以把它添加在现有的控制器作为一个子视图的视图层次结构,像我们一样的UILabels UIButton的早期,或者我们可以加载它作为一个新的控制器的看法。让我们做后者。
3.3。载入视图
UIViewController中有一个方法名为loadview这被称为由控制器来创建其观点。这是一个合适的地方创建一个视图,并将其分配到控制器的View属性。
首先,我们需要一个控制器,所以创建一个新的空名为CircleController类。
在CircleController添加下面的代码设置查看到CircleView:
using MonoTouch.UIKit; namespace CodeOnlyDemo { class CircleController : UIViewController { CircleView view; public override void LoadView() { base.LoadView(); view = new CircleView(); View = view; } } }
最后,我们需要在运行时呈现控制器。让我们这样做的提交按钮,刚才我们添加如下:
submitButton.TouchUpInside += delegate { Console.WriteLine("Submit button clicked"); //circleController is declared a s class variable circleController = new CircleController(); PresentViewController(circleController, true, null); };
现在,当我们重新运行应用程序,并点击提交按钮,一个圆圈的新视图显示:
4。总结
在这篇文章中,我们讨论了如何完全在代码中使用Visual Studio来开发iOS应用程序。我们着眼于如何建立一个项目从一个空的项目模板,讨论如何创建并添加一个根视图控制器窗口。然后,我们展示了如何使用UIKit来创建一个视图层次控制在控制器开发应用程序屏幕。接下来,我们研究如何使打下的意见适当地在不同的方向,以及如何创建一个全屏应用程序在iPhone5。最后,我们看到了如何创建一个自定义视图UIView的子类,以及如何加载视图的控制器内。