我是xcode和Objective-C编程的新手,需要一些帮助。
我希望为ios创建一个基本程序,它在一个视图中使用数据数组和2个UITableViews。我希望第二个UITableView由一个数组填充,该数组基于第一个表中的选择。 我有第二个表的数组数组。但是当在第一个表中选择索引0处的数据时,无法理解如何将数组放在索引0处。
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [technologyData count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// Change UITableViewCellStyle
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier] autorelease];
}
if (tableView == technologyTable)
{
[[cell textLabel] setText:[technologyData objectAtIndex:indexPath.row]];
}
if (tableView == experienceTable)
{
cell.textLabel.text = [[experience objectAtIndex:indexPath.row]objectAtIndex:indexPath.row];
[experienceTable reloadData];
}
return cell ;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == technologyTable)
{
experienceTable = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];
selectTechnology.text = [technologyData objectAtIndex:indexPath.row];
self.technologyList.hidden = YES;
}
if(tableView == experienceTable)
{
self.experienceList.hidden = YES;
selectExperience.text = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];
}
}
答案 0 :(得分:2)
好问题,您可以在一个视图控制器中使用一组委托方法来控制两个表。
首先为两个表创建UITableView类型的属性或IVAR,并将它们连接到IB中的受尊重表。
然后在任何委托方法中(检查哪个表调用该特定方法(ex):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == table1) {
self.arrayIndex = indexPath.row;
[table2 reloadData];
} else if (tableView == table2) {
//Secondary task
} else {/* If necessary */}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == table1) {
//Configure the top array as you need
} else if (tableView == table2) {
if(self.arrayIndex) {
[arrayOfArrays objectAtIndex:self.arrayIndex [subArray objectAtIndex:indexPath.row]];
} else {
//figure something out
}
} else {/* If necessary */}
}
}
如果您需要一些代码帮助,请发布一些。
答案 1 :(得分:0)
使用didSelectRowAtIndexPath
中的UITableViewDelegate
找到您希望第二个tableview填充的目标数组。之后重新加载第二个tableview。这应该可以解决你的问题。
答案 2 :(得分:0)
在didSelectRowAtIndexPath
的{{1}}方法中,您通过传递目标数组重新加载UITableView
这样的表格数据。
答案 3 :(得分:0)
在 didSelectRowAtIndexPath:方法
中- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tv == table1) {
arrForSecondTable = [arrayOfArrays objectAtIndex:indexPath.row];
[table2 reloadData];
}
else if (tv == table2) {
// Do Something
}
else { // Do Something}
}
答案 4 :(得分:0)
正如我在你的代码中观察到的那样,问题在于这个方法:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [technologyData count];
}
您应该检查此方法中的条件,如下所示:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(tableView == table1)
return [technologyData count];
else
return [experience count];
}
修改强>
在你的didSelectRowAtIndexPath:
中只需在行
处设置断点即可experienceTable = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];
and
selectExperience.text = [[experience objectAtIndex:indexPath.row] objectAtIndex:indexPath.row];
并调试它。我很确定,你找到了崩溃的原因。
希望它有所帮助。