标签:
1 uiwindow 的rootwiew决定了应用程序的类型
2 反映视图关系的3个属性
superview:有且仅有一个(除了uiwindow)
subviews:子视图的集合
window:获得当前视图的uiwindow对象
3 按钮至少有两种:uibutton uibarbuttonitem
4 selector是一个指针变量,意思是将方法指定给控件去做
sender是事件源,指要使用这个方法的控件对象
5 使控件的事件与动作关联在一起
1)addTarget:action:forControllerEvents:
2)Interface Building
6 textview 和 textfield关闭键盘(放弃第一响应者)方法
//通过委托来实现放弃第一响应者
#pragma mark - UITextField Delegate Method
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
//通过委托来实现放弃第一响应者
#pragma mark - UITextView Delegate Method
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}
7 开关控件 switch
只有两种状态 true 和 false,用isOn属性来判断状态,设置方法setOn:animated:
//使两个开关的值保持一致
- (IBAction)switchValueChanged:(id)sender {
UISwitch *witchSwitch = (UISwitch *)sender;
BOOL setting = witchSwitch.isOn;
[self.leftSwitch setOn:setting animated:YES];
[self.rightSwitch setOn:setting animated:YES];
}
滑块控件 slider 属性value是滑块的当前值
//用标签显示滑块的值
- (IBAction)sliderValueChange:(id)sender {
UISlider *slider = (UISlider *)sender;
int progressAsInt = (int)(slider.value);
NSString *newText = [[NSString alloc]initWithFormat:@"%d",progressAsInt];
self.SliderValue.text = newText;
}
分段控件 segmented 分为多段每段相当于一个独立的按钮
8 网页视图 webview
1)本地同步加载,需要注意字符集问题loadHTMLString:baseURL:
- (IBAction)testLoadHTMLString:(id)sender { NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];获取全路径 NSError *error = nil;错误指针,发生错误,信息存放到这里 NSString *html = [[NSString alloc] initWithContentsOfFile:htmlPath encoding: NSUTF8StringEncoding error:&error];从路径中读取数据
NSURL *bundleUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];获取基本路径
if (error == nil) {//数据加载没有错误情况下 [self.webView loadHTMLString:html baseURL:bundleUrl];加载 } }
**********
bundle是一个目录,其中包含了程序会使用到的资源.程序也是个bundle叫做mainbundle。
通过使用下面的方法得到程序的main bundle
NSBundle *myBundle = [NSBundle mainBundle];
一般我们通过这种方法来得到bundle.如果你需要其他目录的资源,可以指定路径来取得bundle
NSBundle *goodBundle;
goodBundle = [NSBundle bundleWithPath:@"~/.myApp/Good.bundle"];
一旦我们有了NSBundle 对象,那么就可以访问其中的资源了
// Extension is optional
NSString *path = [goodBundle pathForImageResource:@"Mom"];
NSImage *momPhoto = [[NSImage alloc] initWithContentsOfFile:path];
*********
2)本地同步加载 loadData:MIMEType:textEncodingName:baseURL:
- (IBAction)testLoadData:(id)sender {
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURL *bundleUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
NSError *error = nil;
NSData *htmlData = [[NSData alloc] initWithContentsOfFile: htmlPath];用nsdata读取
if (error == nil) {//数据加载没有错误情况下
[self.webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8"baseURL: bundleUrl];
}
}
3)网络异步加载 loadRequest:
- (IBAction)testLoadRequest:(id)sender {
NSURL * url = [NSURL URLWithString: @"http://www.51work6.com"];严格的http格式
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
self.webView.delegate = self;
}
#pragma mark -- UIWebViewDelegate委托定义方法
- (void)webViewDidFinishLoad: (UIWebView *) webView {
NSLog(@"%@", [webView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"]);
}
9 活动指示器 ActiviityIndicatorView 消除用户等待
1 - (IBAction)startToMove:(id)sender
2 {
3 if ([self.myActivityIndicatorView isAnimating]) { 判断状态
4 [self.myActivityIndicatorView stopAnimating];
5 }else{
6 [self.myActivityIndicatorView startAnimating];
7 }
8 }
进度条 ProgressView 属性progress指当前的进度
- (IBAction)downloadProgress:(id)sender
{
myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(download)
userInfo:nil 给消息发送参数
repeats:YES]; 重复
}
****************
定时器NSTimer 可以在特定时间间隔后项某对象发送消息
****************
-(void)download{
self.myProgressView.progress=self.myProgressView.progress+0.1;
if (self.myProgressView.progress==1.0) {
[myTimer invalidate];停止定时器 使无效
UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@"download completed!"
message:@""
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
}
}
10 1)警告窗 UIAlertView 构造-显示-实现代理
模态的 UIAlertViewDelegate
构造器 -initWithTitle:message:delegate:cancelButtonTitle:
代理方法 -alertView:clickedButtonAtIndex:
- (IBAction)testAlertView:(id)sender {
构建alertView
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Alert"
message:@"Alert text goes here"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];字符串数组
[alertView show]显示;
}
实现代理
#pragma mark-- 实现UIAlertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"buttonIndex = %i", buttonIndex);
}
2)操作表ActionSheet UIActionSheetDelegate
构造器 -initWithTitle:delegate:cancleButtonTitle:destructiveButtonTitle:otherButtonTitles:
显示 -showInView:
代理方法 -actionSheet:clickedButtonAtIndex:
- (IBAction)testActionSheet:(id)sender {
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:nil
delegate:self
cancelButtonTitle:@"取消"
destructiveButtonTitle:@"破坏性按钮"
otherButtonTitles:@"Fackbook",@"新浪微博",nil];
actionSheet.actionSheetStyle = UIActionSheetStyleAutomatic;
[actionSheet showInView:self.view];
}
#pragma mark-- 实现UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"buttonIndex = %i",buttonIndex);
}
3)IOS8 UIAlertViewController实现
可以添加按钮 文本框和自定义视图
alert和actionsheet都可以用它来实现:创建UIAlertController:alertControllerWithTitle:message:preferresStyle:警告框样式UIAlertControllerStyle默认是操作表
创建按钮UiAlertAction:actionWithTitle:style:handler:按钮样式UIAlertActionStyle
添加按钮:addAction:
显示:presentViewController:animated:completion:
- (IBAction)testAlertView:(id)sender {
UIAlertController* alertController = [UIAlertController alertControllerWithTitle:@"Alert" message: @"Alert text goes here" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* noAction = [UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"Tap No Button");
}];
UIAlertAction* yesAction = [UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"Tap Yes Button");
}];
[alertController addAction:noAction];
[alertController addAction:yesAction];
//显示
[self presentViewController:alertController animated:true completion:nil];
}
11 工具栏 UIToolbar:可放置UIBarButtonItem,可变空格,不可变空格。
导航栏 UINavigationBar:管理一个视图控制器的堆栈,来显示树形结构中的视图,可放置UIBarButtonItem。
UINavigationItem:分为3部分,左右放置按钮设定属性是backBarButtonItem或leftBarButtonItem rightBarButtonItem,中间是标题属性是title或者是提示信息属性是 prompt。
******************************
Q:举个栗子,barButtonItem的identifier是"Edit",点击之后,tableView进入编辑模式,然后barButtonItem的identifier由"Edit"变成“Done”,完成编辑了,点击“Done”又变成“Edit”,请问这个怎么用代码实现?
A:1)维护一个状态。如定义一个布尔类型的 isEdit 默认值设置为NO ,点同一个按钮可以这样来修改isEdit的状态
1
2
3
4
5
6
|
-( void )btnPressed:( id )sender { _isEdit = !_isEdit; if (_isEdit) { //////todo your logic. } } |
2)使用tableView自带状态属性barButtonItem.title = self.tableView.isEditing ? @"完成" : @"编辑"
标签:
原文地址:http://www.cnblogs.com/haugezi/p/4817057.html