在选择器中将子视图添加到主 uiview

Posted

技术标签:

【中文标题】在选择器中将子视图添加到主 uiview【英文标题】:adding subview to main uiview in selector 【发布时间】:2013-02-12 20:48:33 【问题描述】:

我正在开发拖放应用程序,当用户放下图像时,我想从它的拖放点复制它,然后原始图像返回到它的初始点。 我决定在执行 touchesEnded 后将 uiimageview 添加到我的视图控制器中,

我有包含该方法的拖动视图类:

 - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event


CGPoint activePoint = [[touches anyObject] locationInView:self];
UIImageView *myimage;
myimage.image = self.image;
myimage.center = activePoint;


ViewController *cview ;
cview = [[ViewController alloc]init];
[cview getpoint: myimage];


现在在视图控制器中,这是 getpoint 选择器:

-(void) getpoint : (UIImageView *) mine
UIImageView *newimage;
newimage = mine;
[self.view addSubview:newimage];


NSLog(@" in getpoint");


当我放下对象时,出现此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

但是当我删除 addsubview 语句时,NSlog 是正确的

任何解决方案?

【问题讨论】:

【参考方案1】:

您实际上并没有为您的 UIImageViews 分配内存。这段代码是可疑的:

CGPoint activePoint = [[touches anyObject] locationInView:self];
UIImageView *myimage;
myimage.image = self.image;
myimage.center = activePoint;

你需要分配/初始化你的图像视图

CGPoint activePoint = [[touches anyObject] locationInView:self];
UIImageView *myimage = [[UIImageView alloc] initWithFrame:rect];
myimage.image = self.image;
myimage.center = activePoint;

rect 变量保存您要添加到层次结构的图像视图的矩形尺寸。您不能将 nil 对象添加到 NSArray。因此,由于 UIImageView 为 nil,因此此调用将失败:

[self.view addSubview:newimage];

【讨论】:

您是否为您的 UIImageView initWithFrame: 提供了一个大小合适的 CGRect:?你确定你传递的图像不是零吗?您能否详细说明您说“它不起作用”时的意思?

以上是关于在选择器中将子视图添加到主 uiview的主要内容,如果未能解决你的问题,请参考以下文章

UIView子视图中的IOS UIImagePicker

UIView 在子视图中绘制

点击自定义 UIView 会触发错误的选择器

使用选择器操作向 UIView 添加多个 UIButton

UITableView,无法识别的选择器发送到实例

使用选择器操作将多个UIButtons添加到UIView