在自定义一个UIView视图时,通常我们需要给自定义的视图从外部传递一些信息到这个视图中,之前我的写法是创建一个方法比方:(initView),在这个方法中我重新创建一些子视图或者进行其他的操作,这样做的确是挺好,但昨天在网上看到有人使用了UIView的回调方法来初始化一些视图,的确也是一件挺不错的事,至少在外部不需要去显示的调用这个initView了。
UIView常用的回调方法:
1. 调用addSubView:成功后会给这个视图发送didAddSubView:回调,出发UIView的子类在新增视图时执行其他的操作;
2. didMoveToSuperView会通知相关视图它们的上级视图已经改变;
3.视图移动前会发出willMoveToSuperVIew:回调;
4.didMoveToWindows:和didMoveToSuperView:类似,第一个是添加到window上,第二是添加到父视图上;
5.willMoveToWindos:在视图移动前发出的回调;
6.willRemoveToSubView:回调通知父视图,子视图即将被删除
这里我以didMoveToSuperView为例,我有一个继承自UIView的CustomerView,
在CustomerView代码:
CustomerView.h 有一个属性
NSString *imageName;
实现它的set get方法,
CustomerView.m中,添加didMoveToSuperView回调方法:
1: - (void)didMoveToSuperView
2:
3: {
4:
5: UIImageView *imageView = [[UIImageView alloc] initWithImage[UImage imaged: self.imageName];
6: [self addSubView:imageView];
7: [imageView release];
8:
9: }
10:
创建CustomerView类
CustomerView *customerView = [[CustomerView alloc] initFrame:CGRectMake(0,0,200,200)];
[customerView setImageName:@“1.png”];
[self.view addSubView:customerView];
[customerView release];
在添加customerView完视图后,该视图会自动回调 didMoveToSuperView方法;
判断一个点在不在一个视图上的方式:
1.CGRectContainsPoint(view.frame,point); 返回一个BOOL类型,
2.如果是在touch方法中,
1: [view pointInside:[touch locationInView:view] withEvent:event];
返回的也是一个BOOL类型
删除子视图的方式
1. for(UIView *subView in view.subviews){
[subView removeFormSuperView];
}
2. [[view subviews] makeObjectsPerformSelector:@selector(removeFromSuperView)];