在我的应用中,我想在一个ViewController
中使用3个表格视图。问题是如何单独使用UITableViewDelegate
方法。例如;我可以通过标记为每个cellForRowAtIndexPath
分别使用UITableView
方法。但是,我不知道对每个tableview使用numberOfRowsInSection
或numberOfSectionsInTableView
方法的方式不同。有可能吗?
答案 0 :(得分:4)
对于数据源和委托方法中具有条件的所有表,只使用一个dataSource和Delegate方法。
- (NSInteger)numberOfRowsInSection:(NSInteger)section;
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section;
{
if (tableView==tabl1) {
return [arr1 count];
}
if (tableView==tabl2) {
return [arr2 count];
}
if (tableView==tabl3) {
return [arr3 count];
}
return 0;
}
- (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 ];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
cell.backgroundColor=[UIColor clearColor];
}
if (tableView==tabl1) {
cell.textLabel.text = [arr1 objectAtIndex:indexPath.row];
}
if (tableView==tabl2) {
cell.textLabel.text = [arr2 objectAtIndex:indexPath.row];
}
if (tableView==tabl3) {
cell.textLabel.text = [arr3 objectAtIndex:indexPath.row];
}
return cell;
}
答案 1 :(得分:4)
在 YourViewController.h :
中制作3个UITableView
变量
YourViewController : UIViewController
{
UITableView* tableView1;
UITableView* tableView2;
UITableView* tableView3;
}
<强> YourViewController.m:强>
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == tableView1)
{
//Your code
}
if (tableView == tableView2)
{
//Your code
}
if (tableView == tableView3)
{
//Your code
}
}
答案 2 :(得分:2)
您不应该使用单独的委托方法。相反,在cellForRowAtIndexPath
等每个委托方法中,您应将表格标识为
if(tableview == TableView1)
{
}
else if(tableview == TableView2)
{
}
else
{
}
等等。这是正确的方法,因为任何表操作都将具有公共委托方法,然后您只需指定表的名称。
答案 3 :(得分:1)
当然:
所有tableview委托函数都将tableView作为第一个参数,因此您所要做的就是跟踪三个表视图,并在每个委托函数中检查委托调用的表视图:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(tableView == firstTableView) {
...
}
else if (tableView == secondTableView) {
...
}
else if (tableView == thirdTableView) {
...
}
}
答案 4 :(得分:1)
答案 5 :(得分:0)
在所有委托和数据源方法中,第一个参数是对tableview对象的引用。因此,您可以随时区分您的表格视图。
答案 6 :(得分:0)
在ViewController.h
{
NSArray *arr1;
NSArray *arr2;
NSArray *arr3;
}
@property (nonatomic, retain) IBOutlet UITableView *tbl1;
@property (nonatomic, retain) IBOutlet UITableView *tbl2;
@property (nonatomic, retain) IBOutlet UITableView *tbl3;
不要忘记将此属性与XIB's
UITableView实例连接。
在ViewController.m
@synthesize tbl1, tbl2, tbl3;
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
if (tableView == tbl1)
return [arr1 count];
if (tableView == tbl2)
return [arr2 count];
if (tableView == tbl3)
return [arr3 count];
return 0;
}
我希望我帮助过你。
答案 7 :(得分:0)
您还可以创建三个表视图控制器类(如果每个tableview的单元显示逻辑都涉及一些复杂性)。将它们添加为[self addChildViewController:(Your Controller Class)
,然后将下一行添加到[self.view addSubview:(Your Controller Class' view)]
,并将视图调整为您要设置的框架。