文档章节

​Xamarin iOS教程之自定义视图

大学霸
 大学霸
发布于 2015/06/24 10:25
字数 1121
阅读 235
收藏 0

Xamarin iOS教程之自定义视图

Xamarin iOS自定义视图

工具栏中的视图在实际应用开发中用的很多,但是为了吸引用户的眼球,开发者可以做出一些自定义的视图。

【示例2-33】以下将实现一个自定义的视图。当用户触摸屏幕时,就会出现一个显示手指当前位置的标签视图,以及改变主视图的背景颜色。代码如下:

1创建一个Single View Application类型的工程,命名为2-13

2添加一个C#的类文件,并命名为MyView,具体步骤如下:

首先,选择菜单栏中的文件|New|File…命令,弹出New File对话框,如图2.53所示。


2.53  操作步骤1

然后选择General中的空类,输入类的名称后,单击“新建”按钮,此时,一个名为MyView的类文件就创建好了。

3打开MainStoryboard.storyboard文件,选择主视图后,选择最右端的“属性”按钮,在属性对话框中,将Class设置为创建的类文件名MyView。如图2.54所示。 

2.54  操作步骤2

4打开MyView.cs文件,编写代码,实现一个自定义的视图。代码如下:

  • using System;

  • using System.Drawing;

  • using MonoTouch.Foundation;

  • using MonoTouch.UIKit;

  • using System.CodeDom.Compiler;

  • namespace Application

  • {

  •          partial class MyView : UIView

  •          {

  •                    private UILabel labelStatus;

  •                    public MyView (IntPtr handle) : base(handle)

  •                    {

  •                             this.Initialize();

  •                    }

  •                    public MyView(RectangleF frame) : base(frame)

  •                    {

  •                             this.Initialize();

  •                    }

  •          //初始化方法

  •                    private void Initialize()

  •                    {

  •                             this.BackgroundColor = UIColor.LightGray;

  •               //添加一个标签对象

  •                             labelStatus = new UILabel (new RectangleF (0f, 0f, this.Frame.Width, 60f));

  •                             labelStatus.TextAlignment = UITextAlignment.Center;

  •                             labelStatus.BackgroundColor = UIColor.DarkGray;

  •                             labelStatus.TextColor = UIColor.White;

  •                             this.AddSubview (this.labelStatus);

  •                    }

  •          //实现触摸事件

  •                    public override void TouchesMoved (NSSet touches, UIEvent evt)

  •                    {

  •                             base.TouchesMoved (touches, evt);

  •                             UITouch touch = (UITouch)touches.AnyObject;

  •                             PointF touchLocation = touch.LocationInView (this);               //获取触摸点的当前位置

  •                             labelStatus.Text = String.Format ("X: {0} - Y: {1}", touchLocation.X, touchLocation.Y);

  •                    }

  •          }

  • }

运行效果如图2.55所示。

2.55  运行效果

注意:以下的构造器覆盖了基类的UIView(IntPtr)构造器,此构造函数总是被当为一个通过本地化代码进行初始化的视图。

  • public MyView (RectangleF frame) : base(frame) {}

TouchesMoved()方法被重写,当用户的手指在主视图上进行移动时,就会执行此方法中的内容。

Xamarin iOS 一次性修改相同的视图

在一个应用程序中,使用了很多相同的视图。如果想要更改这些视图的属性,并且属性都相同,该怎么办呢?可能聪明的开发者会想到,首先在一个视图对象中编写好更改的属性,然后进行复制,最好改变此属性对应的对象名就可以了。

这样的方法确实可行,但是它只适用于个数较少的视图对象。如果此应用程序中有成百上千的相同的视图对象时,这种方法还是否可行?当然是不可行的了,这样会使代码看起来冗余,并且会花费开发者相当长的时间。那么有没有方法可以一次性的将相同视图的相同属性进行修改呢?答案当前是肯定的了。使用Appearance属性就可以实现了,它是一个类型方法,其语法形式如下:

  • 视图类.Appearance.视图的属性=属性设置;

【示例2-34】以下的代码就使用了Appearance属性,将主视图中的所有标签改为青色背景,标题颜色为棕色的视图。代码如下:

  • using System;

  • using System.Drawing;

  • using MonoTouch.Foundation;

  • using MonoTouch.UIKit;

  • namespace Application

  • {

  •          public partial class __14ViewController : UIViewController

  •          {

  •                    ……                                                //这里省略了视图控制器的构造方法和析构方法

  •                    #region View lifecycle

  •                    public override void ViewDidLoad ()

  •                    {

  •                             base.ViewDidLoad ();

  •                             // Perform any additional setup after loading the view, typically from a nib.

  •               //添加标题对象label1

  •                             UILabel label1 = new UILabel ();

  •                             label1.Frame = new RectangleF (0, 90, 320, 50);

  •                             label1.Text="红色";

  •                             this.View.AddSubview (label1);

  •                        //添加标题对象label1

  •                             UILabel label2 = new UILabel ();

  •                             label2.Frame = new RectangleF (0, 200, 320, 50);

  •                             label2.Text="黄色";

  •                             this.View.AddSubview (label2);

  •                             //添加标题对象label1

  •                             UILabel label3 = new UILabel ();

  •                             label3.Frame = new RectangleF (0, 310, 320, 50);

  •                             label3.Text="青色";

  •                             this.View.AddSubview (label3);

  •                             //添加标题对象label1

  •                             UILabel label4 = new UILabel ();

  •                             label4.Frame = new RectangleF (0, 420, 320, 50);

  •                             label4.Text="蓝色";

  •                             this.View.AddSubview (label4);

  •                    }

  •                    ……                                                //这里省略了视图加载和卸载前后的一些方法

  •                    #endregion

  •          }

  • }

运行效果如图2.56所示。

  • UILabel.Appearance.BackgroundColor = UIColor.Cyan;                           //设置所有标签的背景

  • UILabel.Appearance.TextColor = UIColor.Brown;                                       //设置所有标签的文本颜色

运行效果如图2.57所示。

2.56  运行效果             2.57  运行效果

本文选自:Xamarin iOS开发实战大学霸内部资料,转载请注明出处,尊重技术尊重IT人!


© 著作权归作者所有

共有 人打赏支持
大学霸
粉丝 257
博文 872
码字总数 544782
作品 0
东城
程序员
私信 提问
Xamarin iOS教程之添加和定制视图

Xamarin iOS教程之添加和定制视图 Xamarin iOS用户界面——视图 在iPhone或者iPad中,用户看到的摸到的都是视图。视图是用户界面的重要组成元素。例如,想要让用户实现文本输入时,需要使用输...

大学霸
2015/06/16
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0
Xamarin iOS教程之编辑界面编写代码

Xamarin iOS教程之编辑界面编写代码 Xamarin iOS的Interface Builder Interface Builder被称为编辑界面。它是一个虚拟的图形化设计工具,用来为iOS应用程序创建图形界面。单击MainStoryboar...

大学霸
2015/06/11
0
0
Xamarin iOS教程之键盘的使用和设置

Xamarin iOS教程之键盘的使用和设置 Xamarin iOS使用键盘 在文本框和文本视图中可以看到,当用户在触摸这些视图后,就会弹出键盘。本节将主要讲解键盘的输入类型定义、显示键盘时改变输入视图...

大学霸
2015/06/19
0
0
​Xamarin iOS教程之视图显示图像

Xamarin iOS教程之视图显示图像 Xamarin iOS显示图像 在主视图中显示一个图像,可以让开发者的应用程序变的更有趣,例如,在一些应用程序开始运行时,都会通过图像来显示此应用程序的玩法或者...

大学霸
2015/06/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Angular中使用better-scroll插件

由于需要在一个固定的的高度做无限滚动,本来css的overflow-y也可以完成的,奈何安卓不是很流畅,还很生硬,就是用了第三方库better-scroll,配合angular的ng-content。angular的ng-content和...

前端攻城老湿
8分钟前
1
0
Js中apply和Math.max()函数的问题及区别

这篇文章主要介绍了js中apply和Math.max()函数的问题,本文给大家带来两种答案,每一种答案给大家介绍的非常详细,在文章底部给大家提到了js中Math.max.apply和Math.max的区别,写的十分的全...

前端攻城小牛
8分钟前
1
0
解决 SpringBoot 不继承父starter-parent打包不包含依赖的问题

由于项目需要继承自己平台的父 parent , 有的模块是纯 api ,不能有任何依赖, 所以父 parent 不能直接引入 springboot, 单独给非 boot 项目排除依赖的话又特别的麻烦, 且不好把控。 记得刚接触...

stys35
10分钟前
0
0
vuex进阶知识点巩固

我们先回忆一下上一篇的代码 computed:{ getName(){ return this.$store.state.name }} 这里假设现在逻辑有变,我们最终期望得到的数据(getName),是基于 this.$store.state.na...

嫣然丫丫丫
25分钟前
1
0
Python出现安全策略问题的解决方法

Python运行期间出现如下错误 import: attempt to perform an operation not allowed by the security policy `PS' @ error/constitute.c/IsCoderAuthorized/408. 解决方法:在脚本的开头添加......

大糊涂
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部