021插入或删除视图中的子元素

效果如下:

ViewController.h

1 #import <UIKit/UIKit.h>
2
3 @interface ViewController : UIViewController {
4     @private
5     UILabel *_lblParent;
6 }
7
8 @end

ViewController.m

  1 #import "ViewController.h"
  2
  3 @interface ViewController ()
  4 - (void)subviewsDidPush;
  5 @end
  6
  7 @implementation ViewController
  8 - (void)viewDidLoad {
  9     [super viewDidLoad];
 10     //追加父标签_lblParent
 11     _lblParent = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, 320, 320)];
 12     _lblParent.textAlignment = NSTextAlignmentCenter;
 13     _lblParent.text = @"Parent";
 14     _lblParent.layer.borderColor = [UIColor blackColor].CGColor;
 15     _lblParent.layer.borderWidth = 2.0;
 16     [self.view addSubview:_lblParent];
 17
 18     //追加1个子标签lblChild3
 19     UILabel *lblChild3 = [[UILabel alloc] initWithFrame:CGRectZero];
 20     lblChild3.text = @"Child 3";
 21     [lblChild3 sizeToFit];
 22     lblChild3.backgroundColor = [UIColor grayColor];
 23     lblChild3.layer.borderColor = [UIColor blackColor].CGColor;
 24     lblChild3.layer.borderWidth = 2.0;
 25     [_lblParent addSubview:lblChild3];
 26
 27     //在上一个标签lblChild3(下面)插入新的标签lblChild1
 28     UILabel *lblChild1 = [[UILabel alloc] initWithFrame:CGRectZero];
 29     CGPoint newPoint = lblChild1.center;
 30     newPoint.x += 10;
 31     lblChild1.center = newPoint;
 32     lblChild1.text = @"Child 1";
 33     [lblChild1 sizeToFit];
 34     lblChild1.backgroundColor = [UIColor orangeColor];
 35     lblChild1.layer.borderColor = [UIColor blackColor].CGColor;
 36     lblChild1.layer.borderWidth = 2.0;
 37     [_lblParent insertSubview:lblChild1 belowSubview:lblChild3];
 38
 39     //在标签lblChild1追加标签lblChild2
 40     UILabel *lblChild2 = [[UILabel alloc] initWithFrame:CGRectZero];
 41     newPoint.x += 10;
 42     lblChild2.center = newPoint;
 43     lblChild2.text = @"Child 2";
 44     [lblChild2 sizeToFit];
 45     lblChild2.backgroundColor = [UIColor greenColor];
 46     lblChild1.layer.borderColor = [UIColor blackColor].CGColor;
 47     lblChild1.layer.borderWidth = 2.0;
 48     [_lblParent insertSubview:lblChild2 aboveSubview:lblChild1];
 49
 50     //让标签lblChild3和标签lblChild1交换
 51     [_lblParent exchangeSubviewAtIndex:0 withSubviewAtIndex:2];
 52
 53     //如果标签lblChild3是标签_lblParent的子元素的话,就删除标签lblChild3
 54     if ([lblChild3 isDescendantOfView:_lblParent]) {
 55         [lblChild3 removeFromSuperview];
 56     }
 57
 58     //追加弹出提示的按钮
 59     UIButton *btnMessage = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 60     btnMessage.frame = CGRectMake(0, 0, 250, 40);
 61     newPoint = self.view.center;
 62     newPoint.y = self.view.frame.size.height - 40;
 63     btnMessage.center = newPoint;
 64     [btnMessage setTitle:@"显示_lblParent的subviews信息" forState:UIControlStateNormal];
 65     [btnMessage addTarget:self action:@selector(subviewsDidPush) forControlEvents:UIControlEventTouchUpInside];
 66     btnMessage.layer.borderColor = [UIColor blackColor].CGColor;
 67     btnMessage.layer.masksToBounds = YES;
 68     btnMessage.layer.cornerRadius = 8.0;
 69     btnMessage.layer.borderWidth =2.0;
 70     [self.view addSubview:btnMessage];
 71 }
 72
 73 - (void)didReceiveMemoryWarning {
 74     [super didReceiveMemoryWarning];
 75     // Dispose of any resources that can be recreated.
 76 }
 77
 78 #pragma mark - Private Methods
 79 - (void)subviewsDidPush {
 80     NSMutableString *mString = [[NSMutableString alloc] initWithCapacity:8];
 81     [mString setString:@""];
 82     for (id view in _lblParent.subviews) {
 83         NSString *addString;
 84         if ([view isKindOfClass:[UILabel class]]) {
 85             addString = ((UILabel *)view).text;
 86         } else {
 87             addString = [view description];
 88         }
 89         if (mString.length > 0) {
 90             [mString appendString:@", "];
 91         }
 92         [mString appendString:addString];
 93     }
 94     UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"The subviews of _lblParent"
 95                                                      message:mString
 96                                                     delegate:nil
 97                                            cancelButtonTitle:nil
 98                                            otherButtonTitles:@"OK", nil];
 99     [alertV show];
100 }
101
102 @end
时间: 2024-10-10 04:15:31

021插入或删除视图中的子元素的相关文章

AngularJs中,如何在父元素中调用子元素为自定义Directive中定义的函数?

最近一段时间准备使用AngularJs中的自定义Directive重构一下代码. 在这里说明一下,把自定义控件封装成Directive并不一定是要复用,而是要让代码结构更加清晰.就好像你将一个长方法拆分成多个独立的小方法,也未必要复用它们一样.职责独立等一票好处,会让后期维护更加轻松. 在重构的过程中,我遇到了这样一个问题,先上图: 图一: 这就是我要重构的界面,由于之前时间紧,将这三个Filter和两个button都写在了一个页面中.当时我已经预感到,如果将这里面的状态都写到一个scope上,

JQuery中查找父元素,子元素,追加元素,插入元素和删除元素

Jquery之所以强大,和其在获取对象时使用与css选择器兼容的语法有很大关系.而且它还兼容了CSS3的选择器,而且多出了不少. 所以jQuery的选择器也就变得很多很强大.就最基本的有以下四个: $('*')  匹配页面所有元素 $('#id') id选择器 $('.class') 类选择器 $('element') 标签选择器 $('E[attr]') 含有属性attr的元素E $('E[attr=value]') 属性attr=value的元素E JQuery中查找父元素 .closest

在mvc视图中实现rdlc报表展示

需求:在view视图页面中嵌入rdlc报表,rdlc的xml为动态传入的xml字符串.本项目是基于abp框架 可能出现问题: 1.rdlc报表是由asp.net的服务器控件ReportViewer来支持的,view视图不能直接使用服务器控件 2.ReportViewer需要通过aspx页面来承载,并在服务端事件中完成对控件的xml绑定.datatable绑定 3.由于是基于abp框架的项目,不能在aspx.cs后台页面中直接实例化IxxAppService接口的实现类 想达到的效果如下图: 上部

[ jquery 子元素选择器 总结 ] 总结: 伪类子元素选择器

总结: 伪类中的子元素选择器: 第一种类型: :first-child :last-child :nth-child() :nth-last-child() 第二种类型: :only-child :only-of-type 第三种类型: :first-of-type :nth-last-of-type() :nth-of-type() 特点: 伪类选择器很有特点: 1.位置:可以直接通过伪类选择器直接获取开始 结束 和第几个,通常和目标元素在什么位置上有关,可以从正着数,也可以从倒着数,计数从

CSS3学习笔记——伪类hover作用于子元素

最近看到一篇文章:“Transition.Transform和Animation使用简介及应用展示”    ,想看看里面 “不同缓动类效果demo” 例子的效果,发现了一个问题如下: .Trans_Box :hover (冒号前空格)这个伪类只能作用于 .trans_box中的子元素,鼠标移到自身时只能激发其子元素的样式发生改变. <!--Html部分代码--><div id="hhh" class="Trans_Box"> <div

关于子元素的margin-top溢出和元素浮动对父元素高度影响解决方案

以下是个人学习笔记,仅供学习参考. 1.关于子元素的margin-top作用在无margin-top-border的父元素上导致子元素的margin-top溢出问题. 在给没有margin-top-border父元素中的子元素添加margin-top时,发现没有直接表现出来,而是作用到父元素身上,就会导致子元素的margin-top溢出. 条件: 1.父元素没有上边框 2.为第一个子元素设置上外边距时 解决方案: 1.为父元素增加上边框 弊端:父元素会变高 2.通过为父元素设置上内边距来取代子元

Android GridView子元素item按击交互设计:背景颜色改变

<Android GridView子元素按击交互设计:背景颜色改变> 效果图: 大致的需求和ListView相仿,就是要求用户点击GridView中的子元素时候,要有一定的交互响应(背景颜色改变表明用户的操作).重点是在GridView的适配器中,子元素的布局文件中,把android:background属性配置成一个响应的selector,在selector中分别处理android:state_pressed事件在true和false两种状态下的情况. 首先写一个MainActivity:

创建一个新的子元素视图并持有指向数据的游标cursor

android.widget.BaseExpandableListAdapterandroid.widget.CursorTreeAdapterandroid.widget.ResourceCursorTreeAdapter 直接子类SimpleCursorTreeAdapter 类概述一个简单的可扩展的ExpandableListAdapter,通过在XML文件来创建views.你可以指定一个定义了views外观的XML文件. 构造函数public ResourceCursorTreeAdap

jQuery中兄弟元素、子元素和父元素的获取

我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行获取和操作. jQuery提供的方法 上来就把jQuery提供的方法摆在这里是不是有点不好呀,不过,我们从jQuery的方法名称上就能知道这些方法是干嘛的了. parent(selector) 查找父元素,可传入selector进行过滤(下同) parents(selector) 查找所有的祖先节点