我在项目中使用了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;
}
答案 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;
}