Объявите Uibutton в подпредставлении - PullRequest
0 голосов
/ 05 января 2012

Я застрял в том, как объявить uibutton в uiview:

- (void)viewWillAppear:(BOOL)animated {

NSLog(@"Added holderView.");
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];

UIButton *removeSticker = [UIButton buttonWithType:UIButtonTypeCustom];
removeSticker.frame = CGRectMake(0, 0, 100, 100);
[removeSticker setImage:[UIImage imageNamed:@"cancel-disabled.png"] forState:UIControlStateNormal];
[removeSticker addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[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 был видимым, чтобы можно было делать нажатие кнопки, однако там указывается необъявленный идентификатор * holderView:

-(void)longPress:(id)sender {

for(UIButton *removeSticker in holderView.subviews)[removeSticker setHidden: NO];

}

Как мне написать эту строку? Пожалуйста, помогите, большое спасибо.

Ответы [ 2 ]

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

Попробуйте это.

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

В исходном коде вы ссылаетесь на переменную в другом объеме (то есть, holderView). Вот почему ошибка.

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

Только это

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

Причина, по которой вы получаете эту ошибку, состоит в том, что область действия holderView ограничена блоком, в котором она объявлена. Для дальнейшего использования, если вы хотите, чтобы она имела область действия для всего вашего класса, это должен быть ивар или свойство .

Вы также хотите сделать removeSticker иваром по той же причине.

Чтобы сделать его иваром, поместите объявление в заголовочный файл:

UIButton *removeSticker;

Тогда в вашем представлении будет отображаться код, который вы измените

UIButton *removeSticker = [UIButton buttonWithType:UIButtonTypeCustom];

к этому

removeSticker = [UIButton buttonWithType:UIButtonTypeCustom];

Но у ячменя тоже все в порядке с ответом. sender уже указывает на объект removeSticker, объявляете ли вы его как ивар или нет.

...