IOS 菜鸟笔记 之 项目 一

任务目标:

1.从AController 传数据到 BController;

2.由BController 分别使用Get 和 Post 调用接口请求网络数据;

3.得到所请求的数据后弹出对话框:

提示用户“是否将数据返回给AController”;

点击"确定"关闭对话框,退出BController 并将 接口请求的结果 返回给 AController;

点击"取消"关闭对话框

4.在AController 显示 BController 传回的数据;


任务知识点:

1.UIViewController 直接的基本跳转
2.IOS Get 和 Post 异步请求
3.UIViewController 数据传递
4.UIAlertDialog 的使用以及 UIAlertDialog 代理(delegate ,类似于 JAVA 里面的接口)
5.UILabel 自适应高度
6.UISegmentedControl 的基本使用

任务实现:

1.考虑到 StroyBoard 内容太多,如果团队合作开发容易导致 文件编辑冲突,所以优先考虑使用 xib 来做界面,替换方法为:
步骤一:删掉对应的Main.StroyBoard文件;
步骤二:新建Cocoa Touch文件

步骤三:输入名称,并创建XIB 文件

步骤四:去掉默认的MainInterface
步骤五:修改默认生成的 RootViewController文件 名称按自己的喜好便可,修改其为继承自   UINavigationController
@interface RootController : UINavigationController

@end


步骤六:编辑 AppDelegate.m 添加如下代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    RootController *rootController = [[RootController alloc]init];
    MainViewController *mainController  = [[MainViewController alloc]init];
    [rootController addChildViewController:mainController];
    self.window.rootViewController = rootController;
    [self.window makeKeyAndVisible];
    return YES;
}
步骤七:同步骤二,步骤三,新建对应的  BController 的文件
完成后对应的项目结构如下(为了结构清晰,我将一些界面无关的文件移动到 Supporting Files 目录下了):

2.RootController 使用的是 UINavigationViewController 跳转可以使用如下方式:
    BController *b =[[BController alloc] init] ;
    [self.navigationController pushViewController:b animated:true];

3.由AController 传 数据给 BController 可以直接给 BController 赋值,BController 将数据传回给 AController 可以使用代理 ,因此我定义了如下代理:
MainViewController.h
@protocol OnGetData
-(void)sendData:(NSString *) data ;
@end

在 MainViewController实现了它。
MainViewController.h
@interface MainViewController : UIViewController<OnGetData>

@end
MainViewController.m
-(void)sendData:(NSString *) data {
    NSLog(@"data:%@",data);
}

同时在BController中定义:
BController.h
@property id<OnGetData> onGetData;
这样,如果将 onGetData 设置为 MainViewController ,由于 MainController 实现了 此代理 ,那么在 BController里面 调用 
BController.m
[self.onGetData sendData:self.result];
那么在 MainController 中的对应实现也会 被调用,这样就实现了 B->Main 的数据的回调

4.网络请求的相应实现:
BController.m
-(void)POST{
    NSURL *url = [[NSURL alloc ]initWithString:@"http://shadowtest.sinaapp.com/adduser.php"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
    
    NSString* dataStr = @"?name=text&password=111111";
    NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
    
    [request setHTTPBody:data];
    [request setHTTPMethod:@"POST"];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        self.result=   [NSString stringWithFormat:@"这是使用POST请求得到的结果:%@;",str];
        [self showAlertView ];
    }];
}
-(void)GET{
    NSURL *url = [[NSURL alloc]initWithString:@"http://shadowtest.sinaapp.com/"];
    NSLog(@"%@",url.host);
    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
    
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        self.result =  [NSString stringWithFormat:@"这是使用Get请求得到的结果:%@;",str];
        [self showAlertView ];
    }];
}

5.AlertDialog的相应实现:
-(void)showAlertView{
    self.alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"是否将结果传回?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    [self.alertView show];
}
6.UILable的自适应高度XIB实现方式

源码地址:http://download.csdn.net/detail/x498980642/8640169

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值