文档章节

iOS程序-xib的使用

s
 szwq01
发布于 2014/12/11 22:30
字数 676
阅读 17
收藏 0

1.加载RowView.xib文件,创建Objects下面的所有控件:

    NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:nil options:nil];    

2.取出xib中的第一个子控件:

    UIView *rowView = views[0];    

3.设置头像

    UIButton *icon = (UIButton *)[rowView viewWithTag:1];

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

    [icon setImage:[UIImage imageNamed:iconName] forState:UIControlStateNormal];    

4.设置姓名

    UILabel *name = (UILabel *)[rowView viewWithTag:2];

    name.text = _allNames[arc4random_uniform(_allNames.count)];    

5.监听删除按钮

    UIButton *delete = (UIButton *)[rowView viewWithTag:3];

    [delete addTarget:self action:@selector(deleteClick:) forControlEvents:UIControlEventTouchUpInside];



  1. MJViewController.h

    #import <UIKit/UIKit.h>

    @interface MJViewController : UIViewController

    {

    }

    // 添加

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

    // 删除

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

    @property (weak, nonatomic) IBOutlet UIBarButtonItem *removeItem;

    @end

  2. MJViewController.m

  3. #import "MJViewController.h"

  4. #define kDuration 0.5

  5. #define kRowH 50

  6. #define kNameTag 10

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

  8. @interface MJViewController ()

  9. {

  10.     NSArray *_allNames;

  11. }

  12. @end

  13. @implementation MJViewController

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

  15. - (void)viewDidLoad

  16. {

  17.     [super viewDidLoad];

  18.     

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

  20. }

  21. #pragma mark 添加一行

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

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

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

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

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

  27.     

  28.     // 1.创建一行

  29.     UIView *rowView = [self createRowView];

  30.     

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

  32.     [self.view addSubview:rowView];

  33.     

  34.     // 3.让删除item有效

  35.     _removeItem.enabled = YES;

  36.     

  37.     // 4.执行动画

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

  39.     rowView.alpha = 0;

  40.     

  41.     // 4.1.开始动画

  42.     [UIView animateWithDuration:kDuration animations:^{

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

  44.         rowView.alpha = 1;

  45.     }];

  46. }

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

  48. // xib == nib

  49. - (UIView *)createRowView

  50. {

  51.     // 1.加载RowView.xib文件,创建Objects下面的所有控件,并且按顺序装到数组中返回

  52.     NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:nil options:nil];

  53.     

  54.     // 2.取出一行的红色view

  55.     UIView *rowView = views[0];

  56.     

  57.     // 3.设置头像

  58.     UIButton *icon = (UIButton *)[rowView viewWithTag:1];

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

  60.     [icon setImage:[UIImage imageNamed:iconName] forState:UIControlStateNormal];

  61.     

  62.     // 4.设置姓名

  63.     UILabel *name = (UILabel *)[rowView viewWithTag:2];

  64.     name.text = _allNames[arc4random_uniform(_allNames.count)];

  65.     

  66.     // 5.监听删除按钮

  67.     UIButton *delete = (UIButton *)[rowView viewWithTag:3];

  68.     [delete addTarget:self action:@selector(deleteClick:) forControlEvents:UIControlEventTouchUpInside];

  69.     return rowView;

  70. }

  71. #pragma mark 监听删除按钮点击

  72. - (void)deleteClick:(UIButton *)btn

  73. {

  74.     [UIView animateWithDuration:kDuration animations:^{

  75.         CGRect tempF = btn.superview.frame;

  76.         tempF.origin.x = 320;

  77.         btn.superview.frame = tempF;

  78.         

  79.         btn.superview.alpha = 0;

  80.     } completion:^(BOOL finished) {

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

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

  83.         

  84.         // 2.删除当前行

  85.         [btn.superview removeFromSuperview];

  86.         

  87.         [UIView animateWithDuration:0.3 animations:^{

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

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

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

  91.                 CGRect tempF = child.frame;

  92.                 tempF.origin.y -= kRowH + 1;

  93.                 child.frame = tempF;

  94.             }

  95.         }];

  96.         

  97.         // 4.判断垃圾桶

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

  99.     }];

  100. }

  101. #pragma mark 监听头像按钮点击

  102. - (void)iconClick:(UIButton *)btn

  103. {

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

  105. //    btn.superview;

  106.     // 2.获得文本标签

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

  108.     

  109.     // 3.打印

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

  111. }

  112. #pragma mark 删除一行

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

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

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

  116.     

  117.     [UIView animateWithDuration:kDuration animations:^{

  118.         CGRect tempF = last.frame;

  119.         tempF.origin.x = 320;

  120.         last.frame = tempF;

  121.         

  122.         last.alpha = 0;

  123.     } completion:^(BOOL finished) {

  124.         [last removeFromSuperview];

  125.         

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

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

  128.     }];

  129. }

  130. @end


© 著作权归作者所有

s
粉丝 0
博文 1
码字总数 676
作品 0
成都
私信 提问
mac os安装xcode和ios sdk4.2版本

这两天刚刚使用mac系统,个人感觉比起windows7一个显著的优点就是关机速度特别快。当然在安装mac系统时,如果选择IT用户,很多开发系统也就自动安装好了,比如jdk、maven、svn,python的环境...

鉴客
2011/12/14
10.9K
3
iOS XIB使用Safe Area后在iOS9和10上面出现的问题和解决方案

本文由 送你的独白么 原创,转载请注明出处! 导语 普大喜奔,苹果爸爸在9.20号发布了新的iOS 11系统和iPhone手机,作为iOS 开发者,第一件事是什么,当然是买iPhoneX啦------我这个穷逼并不...

壹峰
2018/12/05
225
0
使用 Interface Builder 兼容 iOS6 和iOS7

当你在更新你的App到iOS 7的平台时遇到最大的挑战之一就是确保不要遗忘那些还在使用iOS 6平台的用户,在此我们提供一些建议使你的App应用在iOS 6和iOS 7上同时保留视觉吸引力和技术功能. 此图...

isaced
2014/01/15
13.4K
12
Getting iOS Done 1.1从label开始,前面是星辰大海

1 最初 ### 1.1 label的使用 #### iOS的第一个控件无疑是UILable,iOS中创建一个标签主要有两种方式:一种是以storyboard或者是xib文件方式进行描述,和对应的UIViewController进行绑定之后在...

TC-tomCute
2014/03/02
89
0
TeeChart .NET for iOS图表开发入门教程

去年,TeeChart 为iOS图表开发专门发布了TeeChart NET for iOS(包含在TeeChart Mobile中,TeeChart8.5折进行中),相信很多人都对其感兴趣。慧都为大家制作了TeeChart NET for iOS的入门教程...

裸奔的火腿肠
2014/02/25
76
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部