网易实习第11天--制作第一个ios应用

本文详细介绍了如何在iOS开发中使用MVC模式创建一个包含UITextField, UITableView和UIButton的界面,以及如何读取并存储数据。通过实例展示了控件设计、界面布局和事件处理的关键步骤。
摘要由CSDN通过智能技术生成


前言

主要是MVC模式的应用

一、准备工作

Xcode环境的配置,File ->new->project,选择ios下的app
删除目录下的storyboard文件,我们这里讲述的是依靠代码实现,这样也便于后期的合成和维护。
同时删除delegate的两个文件,同时设置Main interface勾选成无在这里插入图片描述
在这里插入图片描述

二、步骤

1.定义好控件,设计好界面

首先我们从这里可以知道,控件有按钮,输入框,展示框
先说一下UI界面的一个布局,一般来说,以一个UIwindow作为最底层的UI,承载控制器,控制器控制着若干个view
在这里插入图片描述



#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) UITextField *taskField;//输入框
@property (nonatomic) UITableView *taskTable;//展示框
@property (nonatomic) UIButton *insertButton;//按钮
@property (nonatomic) UIWindow *window;
@property (nonatomic) NSMutableArray *tasks;
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    
    
   /*
   CGrect是一个定义矩形的类,定义好中心和长度宽度,便可以声明一个矩形
   这个矩形就是就后面控件的一个属性
   */
    CGRect winFrame = [[UIScreen mainScreen] bounds];
    CGRect buttonFrame = CGRectMake(228, 40, 72, 31);

   /*
   定义控制器的view的背景颜色
   */
    self.view.backgroundColor = [UIColor whiteColor];


    self.taskTable = [[UITableView alloc]initWithFrame:CGRectMake(0, 80, winFrame.size.width, winFrame.size.height - 100)];
    
    self.taskTable.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.taskTable.dataSource = self;
    [self.taskTable registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    
    /*
    设置输入框的各项属性
    */ 
    self.taskField = [[UITextField alloc] initWithFrame:CGRectMake(20, 40, 200, 31)];
    self.taskField.keyboardType = UITextBorderStyleRoundedRect;
    self.taskField.placeholder = @"Type a task, tap Insert";
    
    /*
    设置按钮的各项属性
    */  
    self.insertButton = [UIButton buttonWithType:UIButtonTypeRoundedRect ];
    self.insertButton.frame = buttonFrame;
    [self.insertButton setTitle:@"Insert" forState:UIControlStateNormal];
    
    
    /*
    这部分将这些控件加入大view中,就是将子view加入视图中,
    控制器本身有视图,视图中添加子视图
    */
    [self.view addSubview:self.taskField];
    [self.view addSubview:self.taskTable];
    [self.view addSubview:self.insertButton];
    [self.tasks writeToFile:docPach() atomically:YES];
}

@end


这样设计之后,运行工程,手机模拟器上就会展示界面,但是这个界面没有任何功能,我们需要编写代码,给对象添加行为。也就是说, 我们需要设计监听动作,当我们点击button按钮时,这个应用能有对应的处理动作

2.读入数据

代码如下(示例):

import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) UITextField *taskField;//输入框
@property (nonatomic) UITableView *taskTable;//表格视图
@property (nonatomic) UIButton *insertButton;//按钮@end
@property (nonatomic) UIWindow *window;
@property (nonatomic) NSMutableArray *tasks;
@end
NSString *docPach()
{
    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    return [pathList[0] stringByAppendingPathComponent:@"data.td"];
}
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    //self.tasks = [NSMutableArray array];
    NSArray *plist = [NSArray arrayWithContentsOfFile:docPach()];
    if (plist) {
        self.tasks = [plist mutableCopy];
    } else {
        self.tasks = [NSMutableArray array];
    }
    // Do any additional setup after loading the view.
    CGRect winFrame = [[UIScreen mainScreen] bounds];
    CGRect buttonFrame = CGRectMake(228, 40, 72, 31);
    //UIWindow *theWindow = [[UIWindow alloc] initWithFrame:winFrame];
   // self.window = theWindow;
    
   
   
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.taskTable = [[UITableView alloc]initWithFrame:CGRectMake(0, 80, winFrame.size.width, winFrame.size.height - 100)];
    //self.taskTable.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.taskTable.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.taskTable.dataSource = self;
    [self.taskTable registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    
    self.taskField = [[UITextField alloc] initWithFrame:CGRectMake(20, 40, 200, 31)];
    self.taskField.keyboardType = UITextBorderStyleRoundedRect;
    self.taskField.placeholder = @"Type a task, tap Insert";
    
    self.insertButton = [UIButton buttonWithType:UIButtonTypeRoundedRect ];
    self.insertButton.frame = buttonFrame;
    [self.insertButton setTitle:@"Insert" forState:UIControlStateNormal];
    /*
    给按钮添加绑定事件
    个人认为这个是整个ios应用的核心,有了这个,这个应用才算动起来
    addTarget
    */
    [self.insertButton addTarget:self action:@selector(addTasks:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:self.taskField];
    [self.view addSubview:self.taskTable];
    [self.view addSubview:self.insertButton];
    [self.tasks writeToFile:docPach() atomically:YES];
}
#pragma mark -ACTIONS
- (void)addTasks:(id)sender
{
    NSString *text = [self.taskField text];
    if ([text length] == 0){
        return ;
    }
    NSLog(@"Task entered: %@", text);
    [self.tasks addObject:text];
    [self.taskTable reloadData];
    
    [self.taskField setText:@""];
    [self.taskField resignFirstResponder];
}
#pragma mark - 管理表格视图
/*
tableView是实现了UITableview中的协议
也就是OC中一个很重要的点@protocol

*/
- (NSInteger) tableView : (UITableView *)tableView
numberOfRowsInSection : (NSInteger)section
{
    return [self.tasks  count];
}

- (UITableViewCell *) tableView : (UITableView *)tableView
    cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    UITableViewCell *c = [self.taskTable dequeueReusableCellWithIdentifier:@"Cell"];
    
    NSString *item = [self.tasks objectAtIndex:indexPath.row];
    c.textLabel.text = item;
    return c;
}
- (void)viewDidAppear:(BOOL)animated {
      [super viewDidAppear:animated];
//    [self.taskField becomeFirstResponder];
   // [self.taskField becomeFirstResponder];
}


@end

这样设计之后,运行工程,手机模拟器上不仅会展示界面,而且能实现 存储功能,累死浏览器的浏览历史保存

在这里插入图片描述

总结

总结一下就是,制作一个ios应用,要往控制器的view中加入各个子视图,UITextField,UITableView,UIButton等,再加入各种绑定动作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值