我有一个tableViewController,我使用Interface Builder插入一个具有两个段的分段控制器。由于默认情况下,始终选择第一个分段,因此在显示与第一个分段对应的表视图时,我没有遇到任何问题。但是,当我单击第二个段时,我想显示另一个tableView。
这就是问题所在。 我在单击第二个段时调用newTableViewController类。因此,这种观点正在被推动。请建议我在单击段时在主tableView中使用这两个tableView的方法。
我使用了switch case来切换段。
以下是代码的相关部分: 此方法位于FirstTableViewController中,因为默认情况下会选择第一个段。
-(IBAction) segmentedControlChanged
{
switch(segmentedControl.selectedSegmnentIndex)
{
case 0:
//default first index selected.
[tableView setHidden:NO];
break;
case 1:
NewViewController *controller=[[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
self.navigationController pushViewController:controller animated:YES];
[controller release];
break;
default:
break;
}
}
答案 0 :(得分:2)
将以下代码放在案例1:
的第一行if(self.tblView.isHidden==NO)
self.tblView.hidden=YES;
就像,,,
case 1:
if(self.tblView.isHidden==NO)
self.tblView.hidden=YES;
NewViewController *controller=[[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
self.navigationController pushViewController:controller animated:YES];
[controller release];
break;
答案 1 :(得分:1)
您应该在同一个类中创建两个或更多UITableViews
,或者更好地为单个UITableView
创建不同的数组,然后使用条件将数组添加到同一个表中。我希望你明白我的观点。除非真的很重要,否则你不应该使用不同的类方法。
此外,这样可以省去从不同类别导入不同UITableViews
的麻烦,从而减少内存管理。
答案 2 :(得分:1)
要在同一个类中添加两个tableview,您必须使用Tag for UITableView。根据选定的细分设置标记和上传数据。
我认为This 有同样的问题。
编辑。 有多种选择
答案 3 :(得分:1)
1.创建一个视图控制器说:MainViewController继承UIViewController(不是UITableViewController)。
2.在MainViewController中创建两个tableView,说mTableView1和mTableView2,并分别为tableview分配100和101分配标签。
3.创建一个变量,该变量将根据所选的段存储该值,如果选择了第一个段,则var = 100,等等。
4.在tableview数据源和委托方法中使用此var来找出选择的段,并显示相应的tableview。
如果您的tableview结构和功能相同,那么您甚至可以使用单个tableview并根据所选的段传递数据以在tableview中显示。
代码: 在viewDidLoad中添加以下代码:
m_TableView1 = [[UITableView alloc] initWithFrame:yourFrame];
m_TableView1.tag = 100;
m_TableView1.dataSource = self;
m_TableView1.delegate = self;
[self.view addSubview: m_TableView1];
[m_TableView1 release];
m_TableView2 = [[UITableView alloc] initWithFrame:yourFrame];
m_TableView2.tag = 101;
m_TableView2.dataSource = self;
m_TableView2.delegate = self;
[self.view addSubview: m_TableView2];
[m_TableView2 release];
然后在datasource和delegate方法中使用tag并提供如下适当的数据:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if(tableView.tag == 100)
cell.titleLabel.text = [NSString stringWithFormat:"First table, cell%d",indexPath.row];
else
cell.titleLabel.text = [NSString stringWithFormat:"Second table, cell%d",indexPath.row];
}
答案 4 :(得分:0)
改变这种方式:
1>默认情况下选择一个Tableview和Segmentation Control第一个段并选择First Table视图并将其userinteraction设置为false
2>当选择第二段时,隐藏第一个tableview并发回旧的tableview 并将第二个表视图放在前面并使其可见设置其userinteraction true
答案 5 :(得分:0)
-(IBAction) segmentedControlChanged
{
switch(segmentedControl.selectedSegmnentIndex)
{
case 0:
//default first index selected.
[tableView setHidden:NO];
if([self.view viewWithTag:9999]){
[[self.view viewWithTag:9999]removeFromSuperView]; //remove other table
}
}
break;
case 1:
NewViewController *controller=[[NewViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
[self.view addSubView:controller.view];
[controller.view setTag:9999];
break;
default:
break;
}
}
enter code here