2013-07-29 3 views
0

Json 피드에서 채워지는 tableview가 있는데 행 번호가 다릅니다. 내가하고 싶은 일은 X 행마다 광고를 삽입하는 것입니다. 예를 들어, 피드가 23 행을 반환 한 다음 5,10,15,20 행에서 광고와 함께 행을 삽입하려고합니다.UiTableview는 n 번째 결과마다 행을 삽입합니다.

현재로서는이 문제에 접근하는 가장 좋은 방법을 모르는 상태이므로 표시 할 코드가 없습니다. 내가 예상하는 한가지 문제점은 내가 추가하는 행이 Json 피드와 같은 소스가 아니라는 것입니다. 데이터 소스를 직접 수정하지 않으려는 경우 새 행에 문제가 발생할 수 있다고 생각합니다. 나는하지 않는다.

도움을 주시면 감사하겠습니다.

답변

1

NSMutableArray를 후자를 삽입 할 개체로 사용하십시오.

int numberofrows; 
NSMutableArray *objectsToDisplay; 
UITableView *tbleView; 

그냥 아래로 간단한 테이블보기했다 : -

- (void)viewDidLoad 
{ 
    tbleView=[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 400) style:UITableViewStylePlain]; 
    tbleView.delegate=self; 
    tbleView.dataSource=self; 

    objectsToDisplay=[[NSMutableArray alloc] initWithObjects:@"A ",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil]; 

    numberofrows=[objectsToDisplay count]; 
    [self.view addSubview:tbleView]; 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return numberofrows; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *mycell=[tbleView dequeueReusableCellWithIdentifier:@"cellIdentifier"]; 

    if (mycell==nil) { 
     mycell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"]; 
    } 

    mycell.textLabel.text=[objectsToDisplay objectAtIndex:indexPath.row]; 

    return mycell; 
} 

는 매 5 인덱스 사용 후이 방법

를 행을 삽입하기를
-(IBAction)InsertAdvertizes:(id)sender 
{ 
    for (int i=4;i<numberofrows;i=i+5) { 
     [objectsToDisplay insertObject:@"Hello I am Advertize" atIndex:i]; 
    } 

    NSLog(@"object is %@",objectsToDisplay); 

    [tbleView reloadData]; 
} 

당신 테이블 같은 것을 모양 아래 표시된 이미지 : ---

enter image description here

+0

감사합니다. 정말 포괄적 인 대답입니다. 한 가지 다른 점은, 만약 내가 5 개 이하의 항목을 포함하는 섹션에서 tableview를 나눠서 그들 사이에 광고를 삽입했다면 가능하다는 것인가? row.If 당신의 얼마나 많은 간격 후 (jQuery과 *)있는 tableView { 반환 <데이터 소스가 5로 나눌 수 있습니다 횟수>} –

+0

: - (NSInteger) numberOfSectionsInTableView : 그래서 기본적으로 내가 좋아하는 뭔가를 것 추가하고 싶습니다 섹션으로 광고하십시오 헤더? 가능합니다.귀하의 코멘트와 재 장전 테이블에 설명 된 바와 같이 섹션 번호를 전달하십시오. – Warewolf

+0

헤더의 섹션 통과 제목과 함께 섹션 헤더로 광고를 표시합니다. – Warewolf

0

사용

tableView: numberOfRowsInSection 

columnsToAdd = round(json.objects.count/5) 
return json.objects.count+columnsToAdd 
당신의 objectColumns 돌아

tableView: cellForRowAtIndexPath 

에서 다음

또는 adColumn의 크기를 설정하는

when indexPath.row Modulo 5 != 0 => return yourJsonObjectColumns 
else => return yourAdColumn 

나는 이것이 충분하다고 생각한다. 코드가 있으면 다시 도와 드리겠습니다.

+0

빠른 답변 감사드립니다. numberOfRowsInSection은 본질적으로 내가 tableview를 분할한다는 것을 의미 할 것입니다, 맞습니까? 첫 번째 섹션에는 1 ~ 5, 광고는 1 ~ 5 개 정도 있습니다. 이상적으로 들리 겠지만 구현을 살펴보고 더 많은 질문이 있으면 다시 돌아올 것입니다. –

+0

나는 이것을 시험하고있다. 그러나 내가 가지고있는 문제는 모든 n 번째 행을 추가 할 셀이 내 데이터 소스의 맨 위 (또는 대체 가능) 행에 배치된다는 것이다. 데이터 소스 외에도 행을 삽입하여 아무 것도 잃지 않도록하려면 어떻게해야합니까? –

+0

마지막 단계 인 "indexPath.row Modulo 5! = 0 => return yourJsonObjectColumns else => return yourAdColumn"을 수행해야 할 때 : 내 데이터 소스 또는 "추가 행"의 다음 열을 가져와야합니다. 1. 추가 카운터를 사용하거나 2. 가짜 열을 사용하여 데이터 소스를 채울 수 있습니다 (2를 사용했습니다). – Starbax

관련 문제