2013-07-29 83 views
0

我有一個從Json Feed填充的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,然後在它們之間插入廣告,那有可能嗎?所以基本上我想有這樣的事情: - (NSInteger的)numberOfSectionsInTableView:(UITableView的*)的tableView { 回報 <時代的數據源可以通過5分號>} –

+0

row.If你有多少時間間隔之後想要添加廣告作爲sectionHeader?這是可能的。只需按照您在評論和重新加載表中所述的方式傳遞部分數量即可。 – Warewolf

+0

除了標題的段通過標題外,還可以將廣告顯示爲段標題。 – Warewolf

0

使用

tableView: numberOfRowsInSection 

設置行

columnsToAdd = round(json.objects.count/5) 
return json.objects.count+columnsToAdd 

然後在

tableView: cellForRowAtIndexPath 

回報您objectColumns或adColumn的大小

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

我認爲這已經足夠了。如果你有一些代碼,我會再次幫你。

+0

感謝您的快速回答。 numberOfRowsInSection將意味着本質上我會分裂桌面視圖,這是正確的嗎?所以我會在第一部分有1-5,然後是廣告,等等。這聽起來很理想,我會看看執行情況,如果我有更多問題,我會回來。 –

+0

我想這個,但我遇到的問題是,我將添加每第n行的單元格被放置在我的數據源頂部(或可能替換)行。我怎樣才能插入除了我的數據源的行,所以我不會失去任何東西? –

+0

當你做最後一步「當indexPath.row模5!= 0 =>返回yourJsonObjectColumns else =>返回yourAdColumn」你必須決定:採取我的數據源的下一列或「額外的行」。你可以使用1.一個額外的計數器或2.用假列填充你的數據源(我使用了2.) – Starbax