UIView常见方法总结(一)



一、类扩展(class extension,匿名分类)

1.格式

@interface 类名()

{

    //成员变量……

}

@end


2.作用

1>写在.m文件中

2>一般用来扩充私有成员变量、@property属性、方法等


二、随机数生成

1.arc4random() 会生成任意正整数和0

2.arc4random_uiiform(100) 会生成0~99的整数(包括099


三、UIView常见方法

1.addSubView:(UIView *)child

添加子控件用(最新添加的子控件,会显示在最上面)


2.NSArray *subViews

通过addSubView:方法添加的子控件都会存在于这个数组中


3.removeFromSuperview

将控件本身从父控件中移除(控件本身也会从父控件的subviews数组中移除)


4.(UIView *)viewWithTag:(int)mytag

返回tag值为mytag的子控件,内部的实现是通过forin遍历控件数组,只会返回第一个匹配的tag值的subview,取出最前面的目标tag


//

//  RowView.h

//  01-联系人管理

//

//  Created by apple on 13-11-25.

//  Copyright (c) 2013 itcast. All rights reserved.

//


#import <UIKit/UIKit.h>


@interface RowView : UIView

+ (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name;


@property (nonatomic, weak) IBOutlet UIButton *iconBtn;

@property (nonatomic, weak) IBOutlet UILabel *nameLabel;


@end



//

//  RowView.m

//  01-联系人管理

//

//  Created by apple on 13-11-25.

//  Copyright (c) 2013 itcast. All rights reserved.

//


#import "RowView.h"


@implementation RowView


+ (id)rowViewWithIcon:(NSString *)icon name:(NSString *)name

{

    RowView *view = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:nil options:nil][0];

    

    // 1.设置图标

//    UIButton *iconBtn = (UIButton *)[view viewWithTag:1];

    [view.iconBtn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];

    

    // 2.设置姓名

//    UILabel *nameLabel = (UILabel *)[view viewWithTag:2];

    view.nameLabel.text = name;

    

    return view;

}




@end




//

//  MJViewController.m

//  04-联系人管理

//

//  Created by apple on 13-11-24.

//  Copyright (c) 2013 itcast. All rights reserved.

//


#import "MJViewController.h"

#import "RowView.h"


#define kDuration 0.5

#define kRowH 50

#define kNameTag 10


// 类扩展(class extension,匿名分类)

@interface MJViewController ()

{

    NSArray *_allNames;

}

@end


@implementation MJViewController


#pragma mark 控制器的view加载完毕的时候调用一次

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    _allNames = @[@"西门庆", @"东门庆", @"北门庆", @"南门庆", @"中门庆"];

}


#pragma mark 添加一行

- (IBAction)add:(UIBarButtonItem *)sender {

    // 0.取出最后一个子控件

    UIView *last = [self.view.subviews lastObject];

    // 这行的Y = 最后一个子控件的Y + 最后一个子控件的高度 + 间距

    CGFloat rowY = last.frame.origin.y + last.frame.size.height + 1;

    

    // 1.创建一行

    UIView *rowView = [self createRowView];

    

    // 2.添加一行到控制器的view

    [self.view addSubview:rowView];

    

    // 3.让删除item有效

    _removeItem.enabled = YES;

    

    // 4.执行动画

    rowView.frame = CGRectMake(320, rowY, 320, kRowH);

    rowView.alpha = 0;

    

    // 4.1.开始动画

    [UIView animateWithDuration:kDuration animations:^{

        rowView.frame = CGRectMake(0, rowY, 320, kRowH);

        rowView.alpha = 1;

    }];

}


#pragma mark 创建一行(xib中加载一行的view)

// xib == nib

- (UIView *)createRowView

{

    NSString *icon = [NSString stringWithFormat:@"01%d.png", arc4random_uniform(9)];

    NSString *name = _allNames[arc4random_uniform(_allNames.count)];

    

    RowView *rowView = [RowView rowViewWithIcon:icon name:name];

    

    return rowView;

}


#pragma mark 监听删除按钮点击

- (void)deleteClick:(UIButton *)btn

{

    [UIView animateWithDuration:kDuration animations:^{

        CGRect tempF = btn.superview.frame;

        tempF.origin.x = 320;

        btn.superview.frame = tempF;

        

        btn.superview.alpha = 0;

    } completion:^(BOOL finished) {

        // 1.获得即将删除的这行在数组中的位置

        int startIndex = [self.view.subviews indexOfObject:btn.superview];

        

        // 2.删除当前行

        [btn.superview removeFromSuperview];

        

        [UIView animateWithDuration:0.3 animations:^{

            // 3.遍历后面的子控件

            for (int i = startIndex; i<self.view.subviews.count; i++) {

                UIView *child = self.view.subviews[i];

                CGRect tempF = child.frame;

                tempF.origin.y -= kRowH + 1;

                child.frame = tempF;

            }

        }];

        

        // 4.判断垃圾桶

        _removeItem.enabled = self.view.subviews.count > 1;

    }];

}


#pragma mark 监听头像按钮点击

- (void)iconClick:(UIButton *)btn

{

    // 1.取得按钮的父控件(因为labelbtn处在同一个父控件中)

//    btn.superview;

    // 2.获得文本标签

    UILabel *label = (UILabel *)[btn.superview viewWithTag:kNameTag];

    

    // 3.打印

    NSLog(@"名字是:%@", label.text);

}


#pragma mark 删除一行

- (IBAction)remove:(UIBarButtonItem *)sender {

    // 1.取出最后一个子控件

    UIView *last = [self.view.subviews lastObject];

    

    [UIView animateWithDuration:kDuration animations:^{

        CGRect tempF = last.frame;

        tempF.origin.x = 320;

        last.frame = tempF;

        

        last.alpha = 0;

    } completion:^(BOOL finished) {

        [last removeFromSuperview];

        

        // 剩下的子控件个数 > 1就能够点击删除

        _removeItem.enabled = self.view.subviews.count > 1;

    }];

}

@end



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值