2013-09-26 2 views
1

추가 버튼으로 구성된 기본 뷰를 생성하려고합니다.버튼 클릭시 메인 뷰에 서브 뷰를 동적으로 추가

추가 버튼을 클릭 할 때마다 기본보기에서 하위보기를 추가해야합니다. 하위보기는 닫는 단추로 구성되는 다른 클래스에 있으며, 닫는 단추를 누르면 하위보기 클래스가 기본보기에 대리인을 통해 알립니다. 함수 및 특정 하위 뷰 안개가 주 뷰에서 제거됩니다.

나머지 하위보기의 기본보기에서 위치를 변경해야합니다.

기본보기에서 추가 할 하위보기를 행렬 형식 (2xN) 행렬에 입력하고 싶습니다. 그건 한 행과 n 열의 2 subviews입니다.

동일한 두 가지 방법을 구현했지만 하위 뷰의 위치가 변경되지 않습니다.

방법 1 :

- (IBAction)btnAddView:(id)sender 
    { 

     if ((count%2)==0) 
     { 
      NewSubView *subView = [[NewSubView alloc]initWithFrame:CGRectMake(10, 10+  (i*120), 100, 100) andDelegate:self]; 
      // [self.view addSubview:subView]; 
      [arr addObject:subView]; 
      i++; 

     } 
     else if ((count%2)==1) 
     { 
      NewSubView *subView = [[NewSubView alloc]initWithFrame:CGRectMake(120, 10+(j*120), 100, 100) andDelegate:self]; 
      // [self.view addSubview:subView]; 
      [arr addObject:subView]; 
      j++; 
     } 

     count = count+1; 

     for (int x=0; x<[arr count]; x++) { 
      [self.view addSubview:[arr objectAtIndex:x]]; 
     } 


    self.lblCount.text = [ NSString stringWithFormat:@"count: %d",count]; 

} 


// the delegate function for deleting the view is as follows 


- (void) handleDelegate:(id)sender 
{ 
    int deletedIndex; 
    for (int val=0; val<[arr count]; val++) { 
     if([[arr objectAtIndex:val] isEqual:sender]) 
      deletedIndex =val; 
    } 
    dupArray =[[NSMutableArray alloc]initWithArray:arr]; 
    [arr removeObjectAtIndex:deletedIndex]; 
    [sender removeFromSuperview]; 
    count--; 
    self.lblCount.text = [ NSString stringWithFormat:@"count: %d",count]; 


    if ((deletedIndex%2)==0) 
     i=deletedIndex/2; 
    if ((deletedIndex%2)==1) 
     j--; 



} 

방법 2 :

- (IBAction)btnAddView:(id)sender 
    { 
    int modifiedColValue= 10+(colValue*120); 

     if (modifiedColValue<320) 
     { 

      NewSubView *subView = [[NewSubView alloc]initWithFrame:CGRectMake(rowValue, modifiedColValue, 100, 100) andDelegate:self]; 
      [arr addObject:subView]; 

      colValue++; 
     } 
     else if (modifiedColValue>320) 
     { 
      rowValue=10; 
      [self btnAddView:sender]; 
      colValue++; 
     } 

     count++; 
     for (int x=0; x<[arr count]; x++) 
     { 
      [self.view addSubview:[arr objectAtIndex:x]]; 
     } 

    } 

나 320의 폭, 개수가 파단의 수이고 나머지 파단 재배치하는 방법 메인보기.

답변

0

나는 당신이 찾고있는 대답이 UICollectionView라고 믿습니다. 이 튜토리얼은 도움이 될 것입니다 : http://skeuo.com/uicollectionview-custom-layout-tutorial

+0

안녕하세요, 이것은 정말 유용한 튜토리얼 이었지만 컬렉션보기 대신 UIView를 사용하여 동일한 작업을 수행하려고합니다. 이 링크를 공유해 주셔서 감사합니다. – Anu

+0

죄송합니다. drawRect : 메서드를 사용하여 자식 뷰를 정렬 할 수 있습니다. 자식 뷰를 추가/삭제할 때 setNeedsDisplay :를 사용하여 부모를 무효화하십시오. – apetrov

+0

코드를 추가로 조정할 수도 있습니다. 상위 뷰는 addSubview :를 사용하여 이미 이렇게하기 때문에 하위 뷰를 추적하기 위해 다른 배열이 필요하지 않습니다. 부모 뷰의 subviews 속성을 사용하여 자식 뷰에 액세스하면됩니다. 또한보기 추가 또는 제거를위한 대리자 메소드를 추가 할 필요가 없으며 부모에서 didAddSubview : 및 willRemoveSubview :를 사용하십시오. 자식보기를 제거하려면 버튼 동작에서 [self removeFromSuperview]를 호출하면됩니다. – apetrov

관련 문제