2012-07-23 2 views
0

스토리 보드와 ARC를 사용하는 iOS5 프로젝트가 있습니다.내 UIButton이 내보기에 표시되지 않는 이유는 무엇입니까?

클래스 thisViewController와 함께 스토리 보드에 뷰가 있으며 거기에 드래그 한 하위 뷰가 있는데이 뷰에 클래스를 부여했습니다.

thisView에는 사용자 정의 drawRect 기능이 있습니다.이 기능은 내가 원했던대로 작동하고 멋지게 그립니다. 그러나 나는 또한 동적으로 버튼을 추가 할, 그래서 나는과 같이 thisView의 initWithFrame의 방법을 추가 할 것입니다 :이 기능은 NSLog 표시하기 때문에 호출되고 있지만, 버튼을 아무데도

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     NSLog(@"This is called <3"); 
     UIButton *btn= [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     btn.frame = CGRectMake(0, 0, 50, 50); 
     btn.backgroundColor = [UIColor redColor]; 
     [btn setTitle:@"Play" forState:UIControlStateNormal]; 
     [btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside]; 
     [self addSubview:btn]; 
     [self bringSubviewToFront:btn]; // last thing I tried, didn't work, thought z-index was to low or something 
    } 
    return self; 
} 
을 찾을 수

--EDIT--

추가 정보 :

ThisView.h

@interface RadarView : UIView <CLLocationManagerDelegate>{ 
    CLLocation *currentLocation; 
} 
+0

당신은'[self.view addSubview : btn]; – janusbalatbat

+0

@janusfidel ThisView * 유형의 객체에 대한 속성보기를 찾을 수 없습니다. 정상적으로 처리 되었습니까? 객체 자체가 뷰이기 때문에? 아니? – Spyral

+0

당신이 가지고있는 수퍼 클래스에 따라 다르지만, 당신의 수퍼 클래스는 무엇입니까? – janusbalatbat

답변

0

나는 문제가 일부의 의견과 채팅 덕분에 무엇을 발견

거기에 NSLog 표시했다 initwithframe를 트리거 한 radarviewcontroller,의 초기화이었다, 그리고 initwithcoder 그렇게 사용하지 않은 나는 아무것도 보지 못했다. 그것은 문제 였고 물건이 섞여 있었다. 의견을 보내 주셔서 감사합니다.

0

init 메소드에 SubView를 추가하지 마십시오. - (void)layoutSubviews에 서브 뷰를 추가하십시오.

- (void)layoutSubviews { 
     [super layoutSubviews]; 

     if (![self viewWithTag:12345]) { 
      UIButton *btn= [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
      btn.frame = CGRectMake(0, 0, 50, 50); 
      btn.tag = 12345; 
      btn.backgroundColor = [UIColor redColor]; 
      [btn setTitle:@"Play" forState:UIControlStateNormal]; 
      [btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside]; 
      [self addSubview:btn]; 
     } 
    } 
+2

이것은 확실히 작동합니다. 이 투표를하지 않아도됩니다. downvote 해야하는 경우 다음 이유를 게시 할. 너무 많이 할 줄 알아라. – Roshit

+0

아무도 downvotes을 설명 할 수 없다. 그러나이 메서드는보기가 크기가 변경 될 때마다 (예 : 장치가 회전 된 경우) 새 단추를 추가합니다. – jrturton

+0

하위 뷰가 이미 사용 가능한지 확인하기위한 조건을 추가해야합니다. 예 :'if (! [self viewWithTag : 12345]) {UIButton * btn = [UIButton buttonWithType : UIButtonTypeRoundedRect]; btn.frame = CGRectMake (0, 0, 50, 50); btn.tag = 12345; [self addSubview : btn];}'이것은 뷰에 상호 작용이있을 때마다 태그 "12345"가 붙은 "btn"을 추가하도록 제한합니다. 그에 따라 위 코드를 업데이트했습니다. – Roshit

관련 문제