您的位置:首页 > 产品设计 > UI/UE

进击的KFC:UI(二)基础视图、程序启动流程

2015-11-14 11:14 387 查看
本讲主要讲基础视图:UITextField,UIButton,delegate以及程序的启动流程

一.#pragma mark ——-UITextField

UITextField(输⼊框):是控制⽂本输⼊和显⽰的控件。在App中UITextField出现频率也⽐较⾼。

UITextField和UILabel相⽐,UILabel主要⽤于⽂字显⽰,不能编辑,UITextField允许⽤户编辑⽂字(输⼊)。

可以看出UITextField继承UIControl,而UIControl继承于UIView,所以UITextField具有UIView里的所有方法,所以,我们用初始化UIView的方法来初始化UITextField:

1、开辟空间并初始化(如果本类有初始化⽅法,使⽤⾃⼰的;否则使⽤⽗类的)。

UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(100,100,100,100)];


2、设置⽂本显⽰、输⼊相关的属性

2-1.文本显示:



2-2.输入控制



2-3.外观控制



3、添加到⽗视图上,⽤以显⽰

[self.window addSubView:textField];

二.#pragma mark ——-UIButton

UIButton(按钮):是响应⽤户点击的控件。在App中UIButton是出现频率很⾼的控件。

UIButton与UILabel、UITextField侧重点不同,侧重于处理点按。当然UIButton类也提供了⼀些⽅法控制按钮外观。

UIButton继承UIControl,但它的初始化和其他控件的不同,他是用类方法初始化的

1、创建button对象(如果本类有初始化⽅法,使⽤⾃⼰的;否则使⽤⽗类的)。

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];


2、设置按钮显⽰相关的属性

外观控制:





3、为按钮添加点击事件



4、添加按钮到⽗视图上,⽤以显⽰

[self.window addSubView:button];

⼩节:

UIView是所有可视化控件的基类。

UILabel、UITextField、UIButton是具有特定外观特定功能的视图。

UILabel侧重于⽂本的呈现。

UITextField侧重于输⼊。

UIButton侧重于点击事件处理。

三.#pragma mark ——-delegate

需求:点return回收键盘

点击键盘return按钮实现键盘回收的步骤:

1、将AppDelete作为UITextField的delegate

textField.delegate = self;


2、AppDelete.h⽂件接受UITextFieldDelegate协议

@interface AppDelegate : UIResponder   <UIApplicationDelegate>


3、AppDelete.m⽂件实现textFieldShouldReturn:⽅法

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// 取消textfield第一响应者的身份,让键盘回去 (因为点击了textfield,成为了第一响应者,然后键盘出来了)所以,只要取消textfield第一响应者的身份,键盘就会回去
[textField resignFirstResponder];
return YES;
}


⼩节;

UITextField不应该在类内部(.m⽂件)实现textFieldShouldReturn:,因为有时候,我们点return的时候,并不总是想回收键盘,例如:有两个输⼊框,第⼀个输⼊框输⼊完成之后,⽤户点return按钮,将光标移动到第⼆个输⼊框(即:第⼆个输⼊框称为第⼀响应者)

对于⼀个V来说,⾃⼰只负责触发事件,事件由外界实现,即

delegate。

四、#pragma mark ——-iOS程序启动流程

4.1main函数是程序⼊⼝

任何⼀个程序,⽆论是基于Mac OS还是iOS,程序都是从main.m⽂
件的main函数开始执⾏的。
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil,
NSStringFromClass([AppDelegate class]));
}
} 执⾏UIApplicationMain函数时做了跳转,转到了AppDelete中


4.2UIApplicationMain

UIApplicationMain在程序⼊⼝函数main函数中调⽤,主要实现了3个

功能:

创建应⽤程序(UIApplication)实例

创建应⽤程序代理实例

建⽴事件循环(runloop:死循环,不断检测程序运⾏状态,是否被触

摸、晃动等)

4.3UIApplicationMain剖析

int UIApplicationMain (
int argc,
char *argv[],
NSString *principalClassName,
NSString *delegateClassName
);
1、principalClassName:应⽤程序对象的类名(UIApplication或其⼦类)
2、delegateClassName:应⽤程序delegate的类名。(任何接受了
UIApplicationDelegate的类)
UIApplicationMain根据上述两个类名创建应⽤程序实例、应⽤程序代理实例。
然后建⽴事件循环(runloop),检测程序的各种事件(程序开始启动,接收到触
摸等等)


4.4应⽤程序代理

应⽤程序代理,主要检测应⽤程序的状态并做出相应的处理。

应⽤程序的状态有很多,⽐如:程序启动、进⼊活跃状态、进到后

台、内存警告、收到远程消息等等

任何接受了UIApplicationDelegate协议的对象都可以成为应⽤程序

代理。

⼀旦应⽤程序的某种状态触发,就会执⾏相应的代理⽅法。

UIApplicationDelegate



4.5UIWindow

UIWindow作为应⽤程序的窗⼝,在应⽤程序启动的时候就要加载,

各种UI界⾯都是借助window来呈现的。

UIWindow在创建的时候,应该和屏幕⼀样⼤。通过[UIScreen

mainScreen].bounds可以获得屏幕⼤⼩。

[self.window makeKeyAndVisible];//让window变的可视,即显⽰window。

总结:

UILabel、UITextField、UIButton都是特别常⽤的控件。

他们都是直接或者间接继承于UIView,只是外观和功能不同。

熟悉各种控件的特点和⽅法是我们后期做项⺫的保障。

delegate是iOS重要的设计模式,理解它的原理,有助于写出优质代码

main函数是程序的⼊⼝。UIApplicationMain函数创建了应⽤程序实例,应

⽤程序代理实例,建⽴事件循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: