如何在ios中的单个View Controller中使用两个UITableView。在我的应用程序中我设计了textview和tableview(FirstTableVie)中的按钮。我尝试在其中一个textfield中实现comboBox。这就是我为comboBox tableview(SecondTableView)实现委托函数,而我运行它时显示FirstTableView没有显示FirstTableView。所以我发现我在单个ViewController中实现了两个打包视图。
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if(tableView==self.FirstTableView)
{
return 0;
}
else if(tableView==self.SecondTableView){
return [stateArray count];
}
return 0;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell;
if(tableView==self.FirstTableView)
{
}
else if(tableView==self.SecondTableView)
{
static NSString *identifier=@"Cell";
cell=[tableView dequeueReusableCellWithIdentifier:identifier];
if(cell==nil)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
cell.textLabel.text=[stateArray objectAtIndex:indexPath.row];
}
return cell;
}
答案 0 :(得分:1)
也许只需创建自定义类/对象,您可以设置委托方法让它们拥有它并在自定义类中实现委托方法。
即。
@interface TableViewHandler : NSObject
@end
@implmentation
// implement delegate methods
@end
然后初始化并分配这些对象并将它们分配给两个表视图的委托。
所以在你的视图控制器中你可以做到
tableViewHandler *one = [[TableViewHandler alloc] init]; // you can implment an init if you want otherwise it goes to the NSObject init
然后将第一个表视图的委托方法分配给此对象。
所以代替了viewController中的典型
myTableview.delegate = self
你会做的
myTableView.delegate = self.one;
当然还有dataSource。
如果这个表视图或者你可以分离代码,那么这样做的好处就是。
这取决于您是否希望重用代码。 ViewControllers中的重用性较低,如果使用此类或那个或那个类。可以根据需要干净地修改自定义类并将其转移到其他项目。例如,如果你想在另一个项目中使用这些表中的一个,你就会搞乱从你添加if else逻辑的所有委托方法中复制和粘贴。如果您隔离代码,则只需移植文件即可。
答案 1 :(得分:1)
你可以像下面这样检查。我只写了条件而不是整个代码..
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if(tableView==self.FirstTableView)
{
return 0;
}
else if(tableView==self.SecondTableView){
return [stateArray count];
}
return 0;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell;
static NSString *identifier=@"Cell";
cell=[tableView dequeueReusableCellWithIdentifier:identifier];
if(cell==nil)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
if(tableView==self.FirstTableView)
{
}
else if(tableView==self.SecondTableView)
{
cell.textLabel.text=[stateArray objectAtIndex:indexPath.row];
}
return cell;
}
希望它可以帮助你..
答案 2 :(得分:0)
将标签添加到两个tableview并检查处理中是否有条件 表视图委托像
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section ;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(tableView.tag==1) {
} else {
}
}
我刚刚发布了如何处理的逻辑
答案 3 :(得分:0)
其实我在这里看不到问题。每个委托和dataSource协议方法都返回对特定TableView的引用。只需将视图控制器设置为两个表的委托,并找出在回调中使用哪两个。您可以按标记区分表。
示例:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView.tag == 1) {
return 5;
}else if (tableView.tag == 2){
return 10;
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell;
if (tableView.tag == 1) {
cell = [self configreCellForFirstTableAtIndexPath:indexPath];
}else if (tableView.tag == 2){
cell = [self configreCellForSecondTableAtIndexPath:indexPath];
}
return cell;
}