2012-01-05 2 views
0

하위 뷰에있는 UIButton 선언 : 여기내가있는 UIView에있는 UIButton를 선언하는 방법에 붙어

- (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]; 
} 

난은 buttonClicked을 할 수 있도록있는 UIButton * removeSticker 볼 수 있도록 할, 그러나 그것은 말했다 선언되지 않은 식별자 * 홀더보기 :

-(void)longPress:(id)sender { 

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

} 

이 줄을 어떻게 써야합니까? 도와 줘서 고마워.

답변

0

그냥이

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

당신이 오류가 발생하는 이유는 holderView의 범위가에 선언 된 블록으로 제한됩니다. 참고로, 당신이 당신의 전체 클래스를 통해 범위를 갖고 싶어입니다 그것은 ivar 또는 속성이어야합니다.

동일한 이유로 removeSticker을 ivar로 설정하려고합니다.

UIButton *removeSticker; 

이 그런 다음 viewWillAppear 코드에서이

removeSticker = [UIButton buttonWithType:UIButtonTypeCustom]; 

이 라인

UIButton *removeSticker = [UIButton buttonWithType:UIButtonTypeCustom]; 

을 변경

는 헤더 파일에 선언을 넣어, 그에게 바르를 만들려면 그러나 보리도 그의 대답에서 옳다. sender은 이미 itar로 선언했는지 여부에 상관없이 removeSticker 객체를 가리키고 있습니다.

+0

답장을 보내 주셔서 감사합니다.하지만 신고하지 않은 식별자 'removeSticker'라고했습니다. – zeropt7

+0

죄송합니다. 답변을 업데이트했을 때 죄송합니다. 업데이트를 다시보십시오. removeSticker를 ivar로 만듭니다. – Jim

+0

나는 초보자입니다. 어떻게 그것을 과자로 만들어야합니까? 고마워요! – zeropt7

0

시도해보십시오.

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

원본 코드에서 다른 범위 (예 : holderView)의 변수를 참조하고 있습니다. 그게 왜 오류.

+0

많이 고마워하지만 미안하지만이 응용 프로그램이 충돌합니다 – zeropt7

+0

아, 미안 해요, 오해. longPress가 holderView에서오고있어, 알았어. 당신이해야 할 일은'removeSticker'를 (여러분이하는 것처럼 지역 변수가 아닌) 인스턴스 변수로 선언하고 [removeSticker setHidden : NO]를 호출하는 것입니다. – barley

+0

문제가 해결되었습니다. 감사합니다. – zeropt7

관련 문제