一个控制器中的两个tableView

时间:2014-01-30 05:12:41

标签: ios iphone objective-c uitableview

想在一个viewController中使用两个tableView,但它给出了如下错误:

此类不是密钥tableView的键值编码兼容。

我有两个tableView 1.)tableViewTwo和2.)tableViewThree但没有wokring。

但是当我使用名称tableView时,数据会显示在第一个tableView上。

如何在tableView上使用不同的自定义单元格。 (CustomerListCell用于(First TableView),CustomerListCellThree用于(Second TableView)

任何人都可以建议我这样做的最好方法。我搜索了很多,并尝试了很多我在互联网和stackoverflow上找到的建议。

谢谢高级。

- (void)viewDidLoad
{

    NSURLRequest *requestTwo=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://xyzt.com?key=init"]];
    responseData=[[NSMutableData alloc]init];
    urlConnection=[[NSURLConnection alloc]initWithRequest:requestTwo delegate:self];


    NSURLRequest *requestThree=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://xyzt.com?key=init"]];
    responseDataThree=[[NSMutableData alloc]init];
    urlConnectionThree=[[NSURLConnection alloc]initWithRequest:requestThree delegate:self];



}


#pragma mark - Connection Details

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

    if (connection == urlConnection) {
        NSLog(@"Error");
    }
    else if (connection == urlConnectionThree){
        NSLog(@"Error");
    }

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    if (connection == urlConnection) {
        [responseData setLength:0];
    }
    else if (connection == urlConnectionThree){
        [responseDataThree setLength:0];
    }


}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

    if (connection == urlConnection) {
        [responseData appendData:data];

    }
    else if (connection == urlConnectionThree) {
        [responseDataThree appendData:data];

    }

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    if (connection == urlConnection) {
        NSError *error=nil;
        NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
        self.totalData=[dic objectForKey:@"data"];



        totalTitle=[[NSMutableArray alloc]init];
        totalImage=[[NSMutableArray alloc]init];
        totalIdWorks=[[NSMutableArray alloc]init];


        [_tableViewTwo reloadData];
    }
    else if (connection == urlConnectionThree){
        NSError *error=nil;
        NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseDataThree options:NSJSONReadingMutableContainers error:&error];
        self.totalDataThree=[dic objectForKey:@"data"];


        totalTitleThree=[[NSMutableArray alloc]init];
        totalImageThree=[[NSMutableArray alloc]init];
        totalIdWorksThree=[[NSMutableArray alloc]init];


        [_tableViewThree reloadData];
    } 

}




#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    if (tableView == self.tableViewTwo) {
        return [totalData count];
    }

    else if (tableView == self.tableViewThree){
        return [totalDataThree count];
    }

    return 0;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 40;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"CustomerListCell";

    CustomerListCell *cell = (CustomerListCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomerListCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];



    }


    return cell;
}

3 个答案:

答案 0 :(得分:1)

试试这个。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
return 40.0;
 }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
 if (tableView == tableViewFirst)
    return arrfirst.count;

else if(tableView==tableViewSecond)
    return arrsecond.count;

return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (tableView == tableViewfirst)
    {
       // First tableViewcell
       return cell;
     }
    else if (tableView == tableViewsecond)
    {
        //Second tableViewCell
      return cell;

    }
return nil;
}

答案 1 :(得分:0)

无论您在一个viewController中有多少表视图。正如你所说,你有两个tableView tableViewTwo& tableViewThree。所以你必须为两个数据源创建两个数组。然后设置两个表视图的委托。

[tableViewTwo setDelegate:self];
[tableViewThree setDelegate:self];

现在重新加载表格视图

[tableViewTwo reloadData];
[tableViewThree reloadData];

对于两个表视图,同一个委托将一个接一个地调用。正如你已经把条件放在

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

为您实现的所有委托方法执行相同的操作,并且您希望对不同的表视图有所不同。我想要包括的一件事是使用([tableView isEqual:self.tableViewTwo])代替(tableView == self.tableViewTwo)

答案 2 :(得分:0)

我认为这有助于您了解@Tapas Pal表示为两个tableview设置代表

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
          NSString *customCell;
          UITableViewCell *customTabelCell;

            if(tableView == self.tableViewTwo){
              customCell=@"CustomerListCellTwo";
              customTabelCell=CustomerListTabelCellTwo;
            }else{
              customCell=@"CustomerListCellThree";
              customTabelCell=CustomerListTabelCellThree;
            }


        static NSString *simpleTableIdentifier = customCell;

        customTabelCell *cell = (customTabelCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
        if (cell == nil)
        {

            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:customCell owner:self options:nil];
            cell = [nib objectAtIndex:0];

        }


        return cell;
    }