在UITableView中,cellForRowAtIndexPath忽略前几行

时间:2015-11-03 05:14:08

标签: ios uitableview

我在项目中使用了sqlite,我在_mChats(数组)中成功获得了10个元素。 numberOfRowsInSection方法返回10但cellForRowAtIndexPath忽略前几行,而在模拟器中其他元素都显示在同一个单元格上,为什么? 如果我使用部分而不是行来显示数据,一切都会变得正常。

这是我的代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [_mChats count];
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        VChat *cell = [VChat vChatWithTableView:tableView];
        cell.mChat = _mChats[indexPath.section];
        return cell;
    }

4 个答案:

答案 0 :(得分:1)

我认为是因为这个 cell.mChat = _mChats[indexPath.row];

试试这个 class Ports{ private Map<String, Map<String, String>> ports = new HashMap<String, Map<String,String>>(); public void addPort(String port){ ports.put(port, new HashMap<String, String>()); } public Map<String, Map<String, String>> getPorts() { return ports; } public void setPorts(Map<String, Map<String, String>> ports) { this.ports = ports; } }

这是因为Indexpath是一个属性,里面有两个值, 例如。 IndexPath [section,row]表示某事物的索引路径是段号1,行号5。 希望这有助于您理解。

答案 1 :(得分:0)

这就是cellForRowAtIndexPath应该是这样的:

- (UITableViewCell *)tableView:(UITableView *)iTableView cellForRowAtIndexPath:(NSIndexPath *)iIndexPath {
    NSString *cellIdentifier = @"myCell";

    UITableViewCell *cell = (UITableViewCell *)[iTableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
    }

    cell.mChat = _mChats[indexPath.row];

    return cell;
}

答案 2 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)iTableView cellForRowAtIndexPath:(NSIndexPath *)iIndexPath 
{
   VChat *cell = (VChat *)[tableViewdequeueReusableCellWithIdentifier:@"CellIdentifier"];
   NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"VChat" owner:self options:nil];
   if (cell==nil)
   {
    cell = nib[0];
   }
   cell.mChat = _mChats[indexPath.row];
   return cell;
}

答案 3 :(得分:0)

三个委托方法必须实现你写的有什么不对。正如@Abhinav所说,返回单元格有一些错误。

由于您显示的代码将在屏幕中出现新单元格时创建新单元格。我认为前几行只是因为该单元格无法重复使用。

还有一件事我想说,如果你使用storyboard来构建tableview,这个方法应该是这样的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // The identifier in storyboard you setted.
    static NSString *cellName = @"theCell";
    Cell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
    if (dataSource_[indexPath.row]) {
        // This method will bind data to view
        [cell fillDataWithDict:dataSource_[indexPath.row]];
    }
    return cell;
}