码迷,mamicode.com
首页 > 移动开发 > 详细

IOS 开发指南 第三章学习

时间:2015-09-17 19:27:27      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

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 ? @"完成" : @"编辑"  

IOS 开发指南 第三章学习

标签:

原文地址:http://www.cnblogs.com/haugezi/p/4817057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!