2014-01-30 75 views
-1

想在一個的viewController使用兩個的tableView但它給我像錯誤:兩個的tableView在一個控制器

這個類不是鍵值編碼兼容的關鍵的tableView。

我有兩個tableView 1)tableViewTwo和2)tableViewThree但沒有wokring。

但是當我使用名稱tableView然後數據顯示在第一個tableView。

以及如何在兩個tableView上使用不同的自定義單元格。 (CustomerListCell爲(第一TableView中)和CustomerListCellThree的(第二的TableView)

任何人都可以請建議我這樣做。我搜索了很多,並試圖許多建議,這是我上網和計算器上找到的最好的方式。

在先進的感謝。

- (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; 
} 
+1

您可以訪問兩個TableView中設定的代表......通過一樣,如果放條件(tableView == FirstTableView){....} else {....} – iPatel

+0

在tableview委託方法中,檢查'tableView'是'tableViewTwo'或'tableViewThree'。您可以在界面生成器中通過上述檢查 – Akhilrajtr

+0

在'cellForRowAtIndexPath:'中使用不同的自定義單元格,當您將它們從單元格視圖鏈接起來時,您從文件所有者鏈接了IBOutlet。這可能是導致錯誤的原因。 –

回答

1

單一viewControlle不管你有多少表視圖具有試試這個。

- (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; 
} 
+0

我正在做同樣的事情,但程序如何知道tableView的當前值是否匹配if/else語句中的條件。兩個tableView都在相同的視圖....如何? – user3171903

+0

在cellForIndexpath中,檢查tableView是第一個還是第二個,如果它的第一個然後第一個部分會被執行,第二個部分會執行。與您在所有代表中查看相同。所以程序會理解哪些代碼應該運行。 – Himanshu

0

河正如你所說你有兩個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)

+0

'(tableView == self.tableViewTwo)'有什麼問題? – trojanfoe

+0

請參閱此鏈接http:// stackoverflow。com/questions/14036604/objective-c -nsobject-isequal-vs-comparison –

+0

不,在這種情況下'=='正是你想要做的。你想要測試委託/數據源所引用的表視圖的哪個實例*。這不是平等的一般測試。 – trojanfoe

0

我認爲這是有幫助您瞭解@Tapas好友說兩者的tableview

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

      if(tableView == self.tableViewTwo){ 
       [email protected]"CustomerListCellTwo"; 
       customTabelCell=CustomerListTabelCellTwo; 
      }else{ 
       [email protected]"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; 
    }