我有一个分组的tableview,在一个部分中填充了XML数据。我想要做的是在数据驱动之前创建另一个部分,并对其应用一个动作。
示例:
向用户显示一个“使用您当前位置”的按钮(手动创建的部分),下方是用户可以选择的国家列表(数据驱动部分)
使用设置菜单作为指南。有些选项在一个部分中是单行,因此它们看起来像是一个按钮......
如果这没有意义,我会尝试更好地解释它。
所以我有两个明显的代码行......很简单
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [countrysData count];
}
我想要的是让numberOfSectionsInTableView
返回2并让第一个“部分”说“点击使用你当前的位置”然后推进查看地图,第二部分显示列表我目前在工作的国家。
答案 0 :(得分:1)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(section == 0){ return 1; }else{ return [countrysData count]; } }
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
然后你应该选择在didSelectRowAtIndexPath:方法中做什么,因为indexPath.section。哦,你应该检查你的cellForRowAtIndexPath:方法中的indexPath.section。
答案 1 :(得分:1)
您只需要更新UITableViewDataSource和UITableViewDelegate协议的所有实现,以适当地考虑新部分及其行。
例如,以下是更新numberOfSectionsInTableView:,tableView:numberOfRowsInSection:和tableView:cellForRowAtIndexPath:的方法,但您还需要至少更新tableView:didSelectRowAtIndexPath::
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// calculate the number of sections of non-data (might just be 1)
// calculate the number of sections for the data (you were already doing this, might just be 1)
// return the sum
return 1 + 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSInteger rowCount = 0;
switch (section) {
case 0:
// non-data section has 1 row/cell
rowCount = 1;
break;
case 1:
// data section uses an array
rowCount = [dataArray count];
break;
}
return rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *nonDataCellID = @"NonDataCell";
static NSString *dataCellID = @"DataCell";
UITableViewCell *cell;
int section = [indexPath indexAtPosition:0];
int row = [indexPath indexAtPosition:1];
switch (section) {
case 0:
// or you can just use standard cells here
cell = [tableView dequeueReusableCellWithIdentifier:nonDataCellID];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"NonDataCell" owner:self options:NULL];
cell = nonDataCell; // nonDataCell is an IBOutlet to this custom cell
}
// configure non-data cell here (use tags)
UILabel *someLabel = (UILabel*)[cell viewWithTag:1];
someLabel.text = @"Non-data cell";
break;
case 1:
// or you can just use standard cells here
cell = [tableView dequeueReusableCellWithIdentifier:dataCellID];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"dataCell" owner:self options:NULL];
cell = dataCell; // dataCell is an IBOutlet to this custom cell
}
// configure data call here (using "row")
UILabel *someDataLabel = (UILabel*)[cell viewWithTag:1];
someDataLabel.text = [[dataArray objectAtIndex:row] valueForKey:@"name"];
break;
}
return cell;
}
答案 2 :(得分:0)
我很确定你可以动态改变UITableViewDataSource方法'numberOfSectionsInTableView:'的返回。一旦用户选择了附加部分,只需设置一个标志,让该方法返回所需的表数。然后你强制重新加载表,你应该看到新的部分。