Uibutton только отображается в недавно добавленном UiView - PullRequest
0 голосов
/ 06 января 2012

Я застрял при отображении 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.

1 Ответ

0 голосов
/ 06 января 2012

Из Документация Apple :

"Представление может иметь только одно суперпредставление одновременно."

Так что если вы добавляете представление в качестве подпредставления к другомупредставление, подпредставление будет удалено из его предыдущего суперпредставления и добавлено к новому.(см. документацию по методу addSubview).

(подумайте над тем, почему в UIView есть один @property типа UIView * superview, а не NSArray с именем superviews [во множественном числе]).

Редактировать : если вы действительно хотите иметь несколько представлений в нескольких суперпредставлениях, вам придется создать несколько экземпляров UIView и добавить несколько экземпляров в различные суперпредставления.Вы также захотите позаботиться о соответствующих экземплярах UIView, поэтому вы можете добавить их в NSArray и управлять этим пространством с помощью NSDictionary.

...