iOS学习笔记1--在xcode6以上的版本中不使用storyboard以及部分控件使用

时间:2023-03-08 19:27:42
iOS学习笔记1--在xcode6以上的版本中不使用storyboard以及部分控件使用

  首先建立一个iOS新工程,删除工程自动建立的main.storyboard以及xib文件,并且在info.plist上删除这两个选项

  然后在项目配置中将maninterface设置为空,将launch screen file设置为空,新建一个view,命名为ViewController,因为此时已经有自动生成的类ViewController,所以不用新建类

  建立新建xib文件和类的连接,将file own的class修改为ViewControll,修改完成之后才能进行下一步

  连接新建的xib文件的view属性和到file own,是的view与代码关联

  此时,新的xib就可以生成一个界面对象了

  但是启动时还需要指定使用哪一个view,方法如下

  在AppDelegate.m文件的didFinishLaunchWithOptions方法中添加以下代码

  

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
ViewController* view = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = view;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

首先为引用简历windows,然后简历viewController,将窗口的主控制器设置为生成的view,并设置背景颜色,然后显示界面

到这里基本完成,但是这样的做法生成的界面可能不匹配,此时还需要在项目配置中的launch screen file修改成我们建立的主窗口文件,然后启动,就可以摆脱storyboard了

UIButton iOS的按钮控件,使用UIButton可以实现按键点击的功能,该控件直接继承自UIControl类,所以拥有UIControl的方法和属性,目前使用的属性包括

touch up inside 事件,也就是鼠标的点击事件

获取当前按钮上的文字 titleForState:UIControlStateNormal方法

设置按键不被按下的背景图片 setBackGroundImage image forstate uicontrolstateNormal

设置按键被按下的背景图片 setBackGroundImage image forstate uicontrolstatehighlights

UILabel iOS的文本展示区域

  可以直接使用text属性获取控件的文本和设置控件的文本,还可以设置文本的格式

  使用NSMutableAttributedString 来生成带格式的字符串,字符串使用setAttrbutes设置属性,lanbel有一个attributeText可以接收格式化字符串

设置字体格式的时候使用字典,字典键是文本类型,值是字体大小

iOS使用mvc设计模式,XIB为view视图,viewcontroller为视图控制器,还有一个model是应用程序委托,也就是appDetegate类,该类包含有几个方法,在应用程序的生命周期中起作用

didFinishLaunchingWithOptions 程序启动子后的自定义设置

applicationWillResignActive 应用程序即将从活动状态切换到不活动状态的触发代码,在该方法中引用程序应该做自己的资源备份

applicationDidEnterBackGround 应用程序进入后台执行

applicationWillEnterForeground 应用程序进入活动状态,也就是从后台恢复

applicationDidBecomeActive 应用程序处于非活动状态的时候重新进入活动状态

applicationWillTerminate 应用程序终止,程序即将停止的时候udiaoyong该方法

其中

didFinishLaunchingWithOptions在应用程序完成了所有的初始化工作并准备好与用户交互的时候,调用这个方法

活动控件 静态控件与被动控件

被动控件:大多数情况下用户不能对其进行任何操作,只是一个展示用界面,例如UIImage控件,当然,经过配置,也能对特定事件做出响应

还有一些控件可以在被动状态工作,但是其本身不会触发方法,而是作为数据的容器,如UITextField控件.

所有iOS控件都是UIControl的子类,因为多点触控的引入,以及触发按下和离开都可以触发不同的方法

UIView的所有子类都有一个tag属性,该属性只是一个数值,可以再interface builder中设置,也可以在到吗中设置,系统永远不会修改他得值,可以用于简单的区分不同的控件

UIImageView控件,用于显示图片的控件,包含有以下的属性

1.mode 决定内容在视图内部的显示方式,也就是图像在视图内部的对齐方式,一般使用scall fill 缩放铺满

2.tag 前面描述过,用于相同控件的区分

3.interaction 包含两个选项,第一个user interaction enable 指明当前对象能否和用户进行交互,也就是能否响应一些方法,multiple touch 控件是否支持多点触控事件

4.alpha 定义控件上图片的透明度,也就是图像背后内容的可见度,0完全透明 1完全不透明

5,background 确定视图的背景颜色

6.drawing 包含有一系列绘制选项 opaque 告诉系统控件的背后并没有图片需要绘制,并且允许系统加速控件本身的绘制. hidden 隐藏某个对象 clear Graphics context 在绘制对象之前先使用一块全黑的区域来覆盖空间区域 clip subview 加入一个视图view包含有子view ,该复选框决定了子view的绘制方式,选中之后,只有在父view之内的部分被绘制,之外的部分不会参与绘制,不选中,子view全部绘制,不管子视图是否超过父视图的边界

7.autoresize subview 当前视图发生变化的时候自动调整子视图的大小

8,stretching 拉伸,该选项用于重新调整视图大小的时候使用,将视图的外边缘保持不变,仅仅拉伸中间部分,而不是均匀拉伸视图的全部内容

文本显示UILabel控件拥有以下设置属性

1.text :文本显示类型 plaintext 纯文本 attributed text属性文本

2.字体颜色设置,文本对其设置,行数设置

3.

文本输入控件UITextFeild,用于系统输入文本使用

1.placeholder 占位符 占位符的文本是在文本框文本为空的时候自动显示的文本,可以起到提示用户输入什么内容的作用

2.border style 设定文本框的边框显示风格

3.clearbutton设置.设定何时出现弹出按钮,可以选着编辑时出现,编辑完成出现,不出现,编辑之后一直可见,clear when editing begin 指定用户触摸时清除文本,即一旦开始编辑就清除之前的文本输入

4.adjust to fit :设定显示文本是否随着文本尺寸的长度增加而减少,选中自后,再编辑过程中全部文本都是可见的,但是最小不会小于最小字号

5.接下来就是定义输入时键盘的行为 capitalization 使用word保证用户的每个输入单词的首字母都自动转化成大写,return key 用户结束输入的时候键盘显示的字符,autoenable returnkey 设定当文本为空的时候,return key被禁用

6,secure 只是该输入区域是否为密码输入区域

完成输入关闭键盘

当一个输入区域比如文本框,在用户按下return 按键的时候,说明结束输入,此时会触发一个事件,名称为 Did End On Exit,为该事件设定响应方法,就能实现输入完成自动关闭键盘,例如

- (IBAction)textFieldOnExit:(id)sender {
[sender resignFirstResponder];//控件自身放弃第一响应者的控制权并返回给用户之前操作的控件
}

但是使用数字键盘来输入的时候,没有return 按键,此时应该设定用户按屏幕中没有控件的任何空白区域,都能关闭键盘,此时应当设定,触摸背景关闭键盘,想要做到这一点,首先

先要将界面的基类修改为UIControl,(之前是UIView),修改后界面就拥有了响应事件的能力

为VIEW增加touch down事件,事件的响应函数如下

[self.nameField resignFirstResponder];
[self.numberField resignFirstResponder];//将view中的所有占用键盘的地方的响应权全都释放掉

iOS滑动控件UISlider 用于显示滑动,主要事件

valueChanged 当滑块被移动的时候触发该事件,通过value属性就能得到当前的值,值的最大和最小界限都能控制

当使用不同屏幕适配的时候,为所有的空间添加顶部约束,能够有效地适配不同设备的界面

分段控件 UISegmentedControl 主要用于在不同的界面显示不同的内容,类似于选项卡的一种控件,可以选择分段数量

选择每一个分段的标题或者每一个分段的图片,分段控件的主要响应动作也是valueChanged,如下

- (IBAction)toggleControls:(UISegmentedControl *)sender
{
if(sender.selectedSegmentIndex == )//通过分段控件的selectedSegmentIndex来决定当前的现实情况,从0开始的显示index
{
self.leftSwitch.hidden = NO;
self.rightSwitch.hidden = NO;
self.dosomethingButton.hidden = YES;
}
else
{
self.leftSwitch.hidden = YES;
self.rightSwitch.hidden = YES;
self.dosomethingButton.hidden = NO;
}
}

开关控件UISwitch,用于显示一个非0即1的状态选择按钮

主要响应方法 valueChanged,如下

-(IBAction)switchChanged:(UISwitch *)sender
{
BOOL setting = sender.isOn;//获取当前按键的状态,是一个布尔值
[self.leftSwitch setOn:setting animated:YES];//根据状态设定开关状态
[self.rightSwitch setOn:setting animated:YES]; }

iOS操作表单和警告视图

操作表单的作用是要求用户在两个以上的选项之间做出选择,操作表单从底

部出现,显示一系列按钮供用户选择,用户必须点击其中一个按钮才能继续使用,常用于确认可能有危险或者不可逆的操作,

使用操作表单必须使用委托,用户必须实现UIActionSheetDelegate协议,如下

@interface ViewController : UIViewController<UIActionSheetDelegate>

生成并显示表单的操作为

- (IBAction)buttonPressed:(id)sender
{
UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"are you Sure" delegate:self cancelButtonTitle:@"no way" destructiveButtonTitle:@"yes i am sure"
otherButtonTitles: @"foo",@"bar",nil];
[actionSheet showInView:self.view];
}

initwithtitle 使用标题初始化,第一个参数为操作表单要显示的标题,字符串对象,第二个delegate 表单的委托对象,当按下表单的某个按钮的时候,对应的委托对象收到数据,这里指定为self,cancelButtonTitle 取消按钮的标题 destructiveButtonTitle 按钮的标题,相当于确认按钮的标题,otherButtonTitle:任意数量的其他按钮,参数是一个数组,必须以nil结束

然后调用action showInView:selfview 为操作表单指定一个父类并显示出来,这里指定自己的view

此时,一个操作表单就显示了.

当用于决定了操作表单的选择的时候,也就是按下了一个确定的按钮的时候,操作表单会向生成时指定的委托对象发送一个消息,消息名为ActionSheet,我们继承了

UIActionSheetDelegate协议,就必须实现ActionSheet方法,如下
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
NSString* msg = nil;
if(self.nameField.text.length > )
{
msg = [NSString stringWithFormat:@"you can breathe easy,%@,everything went ok.",self.nameField.text]; }
else
msg = @"you can breathe easy,everything went ok."; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"something was done" message:msg delegate:self cancelButtonTitle:@"prew" otherButtonTitles:nil];
[alert show]; }

在这个方法中继续之前操作表单的处理,应为actionsheet对象也随之发送过来了,index也有了,所以能得到用户按下的位置

前面的代码中还用到了警告视图,用于提示用户发生了一些不寻常的事情,警告视图可以只显示一个按钮也可以显示多个按钮

initwithtitle 第一个是参数为警告视图的标题 message 警告视图要显示的信息 处理警告视图的委托对象 cancelButtonTitle 取消按钮的标题 otherButtonTitles 其他按钮的标题,数组,以nil结束

警告视图并没有和特定的视图绑定在一起,所以不需要指定父视图

viewdidload方法在view类中用于处理试图加载完成之后的对视图的额外设置,例如设定图片背景色等等