知识在于积累(.NET之路……)

导航

在代码中创建的iOS应用

本文探讨如何创建iOS应用程序完全在代码中使用Visual Studio它显示了如何一个空项目模板UIKit的意见创建一个层次来构建应用程序在控制器屏幕然后,它讨论如何创建自定义视图可以装入一个控制器


1。概观

iOS的用户界面视图和控制器的组合构建视图用于以分层方式构建用户界面这些视图层次树可以构造在XcodeInterface 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的视图层次这使得usernameFieldUIView的实例查看属性引用一个子视图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.8iPhone5大小

虽然应用在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方法被调用时,系统需要绘制平局不应该被直接调用。这就是所谓的由系统在运行过程中的循环处理在第一时间通过运行循环视图被添加到视图的层次绘制方法被调用。后续调用绘制时发生的观点被标记为需要通过调用要么SetNeedsDisplaySetNeedsDisplayInRect的视图绘制

我们可以添加我们的观点加入这样的代码里面的重写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的子类以及如何加载视图的控制器

 

posted on 2013-05-25 01:30  汤尼  阅读(369)  评论(0编辑  收藏  举报