추가 버튼으로 구성된 기본 뷰를 생성하려고합니다.버튼 클릭시 메인 뷰에 서브 뷰를 동적으로 추가
추가 버튼을 클릭 할 때마다 기본보기에서 하위보기를 추가해야합니다. 하위보기는 닫는 단추로 구성되는 다른 클래스에 있으며, 닫는 단추를 누르면 하위보기 클래스가 기본보기에 대리인을 통해 알립니다. 함수 및 특정 하위 뷰 안개가 주 뷰에서 제거됩니다.
나머지 하위보기의 기본보기에서 위치를 변경해야합니다.
기본보기에서 추가 할 하위보기를 행렬 형식 (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의 폭, 개수가 파단의 수이고 나머지 파단 재배치하는 방법 메인보기.
안녕하세요, 이것은 정말 유용한 튜토리얼 이었지만 컬렉션보기 대신 UIView를 사용하여 동일한 작업을 수행하려고합니다. 이 링크를 공유해 주셔서 감사합니다. – Anu
죄송합니다. drawRect : 메서드를 사용하여 자식 뷰를 정렬 할 수 있습니다. 자식 뷰를 추가/삭제할 때 setNeedsDisplay :를 사용하여 부모를 무효화하십시오. – apetrov
코드를 추가로 조정할 수도 있습니다. 상위 뷰는 addSubview :를 사용하여 이미 이렇게하기 때문에 하위 뷰를 추적하기 위해 다른 배열이 필요하지 않습니다. 부모 뷰의 subviews 속성을 사용하여 자식 뷰에 액세스하면됩니다. 또한보기 추가 또는 제거를위한 대리자 메소드를 추가 할 필요가 없으며 부모에서 didAddSubview : 및 willRemoveSubview :를 사용하십시오. 자식보기를 제거하려면 버튼 동작에서 [self removeFromSuperview]를 호출하면됩니다. – apetrov