2013-09-26 110 views
1

我想創建一個由添加按鈕組成的主視圖。將動態子視圖動態添加到按鈕單擊的主視圖

每次點擊添加按鈕時,都必須在主視圖中添加子視圖。子視圖出現在另一個由關閉按鈕組成的類中,點擊關閉按鈕子視圖類通過委託通知主視圖功能和特定的子視圖薄霧從主視圖中刪除。

其餘子視圖必須在主視圖中重新定位。

我想在子視圖中添加矩陣形式(2xN)矩陣的主視圖。這是一行和兩列的2個子視圖。

我已經實現了兩個相同的方法,但子視圖沒有得到重新定位。

方法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而不是集合view.any想法如何做到這一點。 感謝您分享此鏈接.. – Anu

+0

對不起,遲到的迴應!您可以使用drawRect:方法來安排子視圖。當你添加/刪除子視圖時,只需使用setNeedsDisplay:使父項失效即可。 – apetrov

+0

你可能還想調整你的代碼。您不需要另一個數組來繼續跟蹤子視圖,因爲父視圖已經通過使用addSubview來完成此操作。只需使用父視圖的subviews屬性即可訪問子視圖。您也不需要添加委託方法來添加或刪除視圖,只需在父級中使用didAddSubview:和willRemoveSubview:即可。要刪除子視圖,只需在按鈕操作上調用[self removeFromSuperview]。 – apetrov