我是Xcode和Objective-C编程的新手,需要一些帮助。
我希望为iOS创建一个基本程序,该程序在一个视图中使用一系列数据和2个uitableviews。我希望第二个UitaiteView由基于第一表中的选择的数组填充。我有第二个表的数组。但是当在第一个表中选择索引0时的数据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];
}
}
好问题,您可以在一个视图控制器中使用一组委托方法来控制两个表。
您首先为两个表创建属性或类型的属性,然后将它们连接到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 */}
}
}
如果您需要在代码方面提供一些帮助,请发布一些。
找到要使用UITableViewDelegate
中的didSelectRowAtIndexPath
填充第二个TableView的目标数组。在重新加载第二个桌面视图之后。那应该解决您的问题。
在didSelectRowAtIndexPath
的UITableView
方法上,您通过传递目标数组来重新加载表像[tbl reloadData]
一样。
在> 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}
}
正如我在您的代码中所观察到的那样,此方法的问题是:
-(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];
并调试它。我很确定,您会发现崩溃的原因。
希望它有帮助。