UI_封装

这篇博客介绍了如何在iOS应用中封装UI组件,包括使用LTView创建用户名和密码输入框,以及通过模态跳转实现从登录界面到注册界面的交互。在RootViewController中,展示了创建自定义视图、按钮及其响应方法,而在registerViewController中,设置了返回按钮并处理返回操作。
摘要由CSDN通过智能技术生成

#import "AppDelegate.h"

#import "RootViewController.h"

@interface AppDelegate ()


@end


@implementation AppDelegate



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

  //--------------------------------------------------------------------------

    //初始化根视图控制器

    RootViewController *rootViewController = [[RootViewController alloc]init];

    //设置为window的根视图控制器

    self.window.rootViewController = rootViewController;

  //--------------------------------------------------------------------------  

    

    /*

     模拟系统中window rootViewController 属性的setter方法

     -(void)setRootViewController:(RootViewController *)viewController{

     

     if(_rootViewController != viewController){

     [_rootViewController release];

     _rootViewController = [viewController retain];

     

     //self代表的就是window

     [self addSubview: viewController.view];

     }

  }

     

    */

    


    

    

    

#import "RootViewController.h"

#import "LTView.h"

#import "registerViewController.h"



@interface RootViewController ()


@end


@implementation RootViewController


//点击注册按钮的方法//跳转到注册的视图控制器  这种跳转方式成为模态


-(void)createLoginViewByLTView{

    //首先创建用户名和密码输入的控件

    //得到整个屏幕的宽度

    float screenWidth = CGRectGetWidth(self.view.frame);

    //得到ltView的宽度  ltView整体居中

    float ltVWidth = screenWidth-40*2;

    //label显示内容的数组

    NSArray *labelTextArray = [NSArray arrayWithObjects:@"用户名",@"密码", nil];

    //输入框占位字符数组

    NSArray *placeHolderArray = [NSArray arrayWithObjects:@"请输入用户名",@"输入密码", nil];

    for (int i = 0 ; i<2; i++) {

        LTView *ltView = [[LTView alloc]initWithFrame:CGRectMake(40, 100+i*(40+20), ltVWidth, 40)];

        ltView.leftLabel.text = labelTextArray[i];

        ltView.rightTextField.placeholder = placeHolderArray[i];

        [self.view addSubview:ltView];

    }

    

}


-(void)createButton{

    

    UIButton *registerButton = [UIButton buttonWithType:UIButtonTypeSystem];

    [registerButton setTitle:@"注册" forState:UIControlStateNormal];

    registerButton.frame = CGRectMake(80, 300, 100, 50);

    [registerButton addTarget:self action:@selector(registerAction:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:registerButton];

}


-(void)registerAction:(UIButton *)sender{

    

    //初始化注册的视图控制器

    registerViewController *registerVC = [[registerViewController alloc]init];

    

    //模态跳转

    //viewController:将要出现的视图控制器(将要跳转过去的视图控制器)

    //animated  :跳转的过程是否需要动画,需要:YES    不需要:NO

    //completion: block参数,目前可以理解为一个代码片段。这里这个参数的作用是,跳转完成之后,所要执行的操作,如果跳转完成不执行任何操作,可以直接将此参数赋值为  nil

    [self presentViewController:registerVC animated:YES completion:^{

        NSLog(@"我跳转完成了");

    }];

}




- (void)viewDidLoad {

    [super viewDidLoad];

    //初始化一个label,添加到视图控制器自带的view

//    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

//    label.text = @"我在视图控制器中";

//    [self.view addSubview:label];

    

    [self createLoginViewByLTView];

    [self createButton];


    

    NSLog(@"%s --- 视图加载完毕!",__FUNCTION__);

}



//视图即将出现

-(void)viewWillAppear:(BOOL)animated{


    [super viewWillAppear:animated];

    NSLog(@"%s --- 视图将要出现了!",__FUNCTION__);

}


//视图已经出现

-(void)viewDidAppear:(BOOL)animated{

    [super viewDidAppear:animated];

    NSLog(@"%s --- 视图已经出现!",__FUNCTION__);

}


//视图即将消失

-(void)viewWillDisappear:(BOOL)animated{

    [super viewDidDisappear:animated];

    NSLog(@"%s --- 视图将要消失",__FUNCTION__);


}


//视图已经消失

-(void)viewDidDisappear:(BOOL)animated{

    [super viewDidDisappear:animated];

    NSLog(@"%s --- 视图已经消失",__FUNCTION__);

}


//当前视图控制器被释放的时候,所执行的方法

-(void)dealloc{

    //ARC下不需要写[super dealloc];      MRC下要写[super dealloc];

    

}



#import "registerViewController.h"


@interface registerViewController ()


@end


@implementation registerViewController







- (void)viewDidLoad {

    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor cyanColor]];

   

    //加一个"返回"按钮,作用为返回根视图控制器

    UIButton *backButtun = [UIButton buttonWithType:UIButtonTypeSystem];

    [backButtun setTitle:@"返回" forState:UIControlStateNormal];

    [backButtun setFrame:CGRectMake(120, 150, 100, 100)];

    [backButtun addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:backButtun];

}


//返回按钮的点击方法

-(void)backAction:(UIButton *)sender{

//返回上一个视图控制器

    //animated:返回的时候是否需要动画

    //completion:返回动作结束之后,如果还要进行其他操作,就实现此函数,不需要直接赋值nil

    

    [self dismissViewControllerAnimated:YES completion:^{

        NSLog(@"我是注册界面,我要消失了");

    }];

}



    

#import "LTView.h"


@implementation LTView


//因为labrlTextField要根据LTView的大小来布局,所以我们需要拿到LTViewframe,所以需要重写LTView的初始化方法。

-(instancetype)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];

    if (self) {

     //在初始化方法中,为LTView添加label textField

        //初始化label。并且添加到LTView  label textField的宽度比例大约为12

           //得到整个屏幕宽度

        float sumWidth = CGRectGetWidth(frame);

           //得到label的宽度

        float labelWidth = (sumWidth-20)/3;

        _leftLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, labelWidth, CGRectGetHeight(frame))];

        [self addSubview:_leftLabel];

       //初始化textField 并添加到LTView

        _rightTextField =[[UITextField alloc]initWithFrame:CGRectMake(labelWidth + 20, 0,labelWidth *2, CGRectGetHeight(frame))];

        [self addSubview:_rightTextField];

    }

        return self;

}


    

    

    

    

    

    

    

    

    


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值