【问题标题】:uibutton only showing in the newly added uiviewuibutton 仅显示在新添加的 uiview 中
【发布时间】:2012-01-06 10:32:18
【问题描述】:

我无法显示 uibutton *removeSticker,请帮忙。

- (void)viewWillAppear:(BOOL)animated {

UIView *holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 50, _imagePicker.selectedImage.size.width, _imagePicker.selectedImage.size.height)];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:[holderView frame]];
[imageView setImage:_imagePicker.selectedImage];
[holderView addSubview:imageView];

removeSticker = [UIButton buttonWithType:UIButtonTypeCustom];
removeSticker.frame = CGRectMake(0, 0, 32, 32);
[removeSticker setImage:[UIImage imageNamed:@"cancel-disabled.png"] forState:UIControlStateNormal];
[removeSticker addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown];
[holderView addSubview: removeSticker];
[removeSticker setHidden: YES];

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];

UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[rotationRecognizer setDelegate:self];
[holderView addGestureRecognizer:rotationRecognizer];

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[holderView addGestureRecognizer:panRecognizer];

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[holderView addGestureRecognizer:tapRecognizer];

UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[longPressRecognizer setDelegate:self];
[holderView addGestureRecognizer:longPressRecognizer];

[stickerView addSubview:holderView];

}

- (void)buttonClicked:(id)sender{
UIView *holderView = [(UIButton *)sender superview]; [holderView removeFromSuperview];
}

uibutton *removeSticker 只出现在最新添加的uiview *holderView 上,如果我想编辑之前添加的一次,什么都不会发生。请帮忙,非常感谢。

-(void)longPress:(id)sender {
[removeSticker setHidden:NO];
}

请查看附件截图:http://i.stack.imgur.com/moMOj.png

对于上面的截图,瓶子和西瓜是*holderView。 我先添加了瓶子,然后添加了西瓜,但是当我点击瓶子时,[removeSticker setHidden:NO]; 出现在西瓜而不是瓶子中。

[removeSticker setHidden:NO]; 仅显示在最新添加的*holderView 上。

【问题讨论】:

  • “只出现在最新添加的uiview *holderView上”是什么意思?你能解释更多吗?
  • @Canopus 我已经更新了我的问题,非常感谢。

标签: ios uiview uibutton


【解决方案1】:

来自Apple's documentation

“一个视图同时只能有一个父视图。”

因此,如果您将视图作为子视图添加到另一个视图,则子视图将从其先前的父视图中删除并添加到新视图中。 (参见 addSubview 方法的文档)。

(考虑一下为什么 UIView 有一个 UIView *superview 类型的 @property,而不是一个名为 superviews [复数] 的 NSArray)。

编辑:如果您真的想在多个超级视图中拥有多个视图,则必须创建 UIView 的多个实例并将多个实例添加到各个超级视图中。您还需要处理相应的 UIView 实例,因此您可以将它们添加到 NSArray 并使用 NSDictionary 管理该区域。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多