2

我正在尝试在情节提要的单个 segue 中实现 3 个表。When one table is selected it will unhidden a view with another table and likewise one more. 以下代码用于一个表格,每个表格的单元格格式不同,行也不同。那么如何通过编码为每个表设置不同的行数等等来区分每个表?

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return  3;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell2";
    UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell1==nil)
{
    cell1=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
    temp=[array objectAtIndex:indexPath.row];
    UILabel *Label1 = (UILabel *)[cell1 viewWithTag:4];
    Label1.text = temp.Title;
    UILabel *Label2 = (UILabel *)[cell1 viewWithTag:6];
    Label2.text = temp.Title;
    UITextField *textfield1 = (UITextField *)[cell1 viewWithTag:5];
    textfield1.text =temp.description;
    UILabel *Label3 = (UILabel *)[cell1 viewWithTag:7];
    Label3.text = temp.Title;
    return cell1;
}
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.showlist=[[ShowList alloc]initWithNibName:@"ShowList" bundle:nil];
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    ShowlistIndex=indexPath.row;
    _secondview.hidden=NO;
}
4

5 回答 5

12

你应该声明你tableViews.h文件。

@property (weak, nonatomic) UITableView *firstTableView;
@property (weak, nonatomic) UITableView *secondTableView;
@property (weak, nonatomic) UITableView *thirdTableView;

然后所有的委托方法都有变量指向女巫对象调用这个方法,所以你可以检查:

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(tableView == self.firstTableView)
       return  3;
   else if(tableView == self.secondTableView)
       return 4;
   else if(tableView == self.thirdTableView)
      return 100;
}

其他委托方法以相同的方式工作。

于 2013-11-12T11:52:40.337 回答
2

您可以使用类属性跟踪不同的表格视图,例如:

@property (nonatomic, strong) UITableView *tableView1;
@property (nonatomic, strong) UITableView *tableView2;
@property (nonatomic, strong) UITableView *tableView3;

在委托方法中,您可以检查正确的 tableView 例如:

if (tableView == self.tableView1) {
    // add code for tableView1
} else if (tableView == self.tableView2) {
    // add code for tableView2
} else if (tableView == self.tableView3) {
    // add code for tableView3
} else {
    // unknown tableView
}
于 2013-11-12T11:57:20.793 回答
1

您在每个委托方法中都有 tableview 引用,对吗?您可以根据它找出您当前正在浏览的tableview..

假设..

IBOutlet UITableView *tableView1;
IBOutlet UITableView *tableView1;
IBOutlet UITableView *tableView1;

前任:

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    if(tableView == tableView1)
      return 1;
    if(tableView == tableView2)
      return 5;
    return 10;
}

您可以对其他委托方法执行相同的操作.. 我希望我正确理解了您的问题..

于 2013-11-12T11:55:25.900 回答
0

您需要创建 3 个 uitableview 网点。然后您可以通过指定标签来识别表格视图。例如 tableview1.tag=1、tableview.tag=2 等。

然后在 tableview 方法中你可以使用它。例如。

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 if(tableView.tag==1){
return  3;
}
else if(tableView=2)
{return 3;}
}

可能是这个帮助。

于 2013-11-12T11:57:02.810 回答
0

斯威夫特 4.1

4.1 是我编写代码的版本。它可能适用于其他版本的 swift。我不确定。


首先,右键单击tableViewContent1 和 tableViewContent2并将其拖到dataSource 并委托View Controller中,如下图所示。 在此处输入图像描述


其次,您可以在下面实现我的代码。* 我已经在 tableViewContent1 和 tableViewContent2 中设置了标签 = 1000 。


导入 UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableViewContent1: UITableView!
    @IBOutlet weak var tableViewContent2: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

}

extension ViewController :
UITableViewDelegate,UITableViewDataSource {


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableView == tableViewContent1 {
            // in order to make the tableViewContent1 get 5 rows.
            return 5
        }
        else{
            // in order to make the tableViewContent2 get 3 rows.
            return 3
        }

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if tableView == self.tableViewContent1 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "content1", for: indexPath) as! TableViewCellFirstCustom 
            let label : UILabel = cell.viewWithTag(1000) as! UILabel{
                lab.text = "to change label in content1."
            }
            return cell
        }

        else {
            let cell = tableView.dequeueReusableCell(withIdentifier: "content2", for: indexPath)  
            let label : UILabel = cell.viewWithTag(1000) as! UILabel
            label.text = "to change label in content2."
            return cell
        }
    }

}

之后,您将获得如下图所示的结果。它对我有用。 在此处输入图像描述

于 2018-04-08T14:24:42.933 回答