2010-08-15 2 views
4

Мне нужен пример или пояснения о том, как заполнить 2 вида таблиц, которые находятся на одном и том же представлении. Мне нужно понять метод cellForRowAtIndexPath, может ли кто-нибудь предоставить мне пример того, как должен выглядеть код?2 tableview на одном виде

Я имею в виду, как определить, что идет, какой вид таблицы?

Благодаря

Ниже мой метод cellForRowAtIndexPath:

// Customize the appearance of table view cells. 
- (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] autorelease]; 
    } 

// Configure the cell... 
// Set up the cell 
MyAppAppDelegate *appDelegate = (MyAppAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    if (tableView == radios_tv) { //radio_tv is an IBOutleet UITableView 
     sqlClass *aRadio = (sqlClass *)[appDelegate.array_radios objectAtIndex:indexPath.row]; 
     [cell setText:aRadio.r_name]; 
     return cell; 
    } 
    if (tableView == presets_tv) { //preset_tv is an IBOutlet UITableView 


    } 

} 

и эй vikingsegundo, теперь мне нужно удалить ячейку, которая находится на моем классе TableViewController, как мне это сделать? Я объясню, вот мой код:

- (void)tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if(editingStyle == UITableViewCellEditingStyleDelete) { 

     //Get the object to delete from the array. 
     Coffee *coffeeObj = [appDelegate.coffeeArray objectAtIndex:indexPath.row]; 
     [appDelegate removeCoffee:coffeeObj]; 

     //Delete the object from the table. 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

Поскольку мы поставили разные контроллеры, как мы должны двигаться дальше этой линии? Должен ли я помещать tableViewController вместо «self»?

//Delete the object from the table. 
      [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

ответ

9

IMO самым чистым решением будет иметь один контроллер для каждого вида стола.

radios_tv будет называть его собственным методом делегата, а presets_tv называет его собственным.

редактировать

если вы используете один контроллер для п Tableview, вы должны будете использовать, если-statemenst во многих местах, в

  • – numberOfSectionsInTableView:
  • – tableView:numberOfRowsInSection:
  • – tableView:titleForHeaderInSection:
  • ...

в основном во всех методах UITableViewDatasource-Protocol, которые вам необходимо реализовать.

Так что, если вам нужно что-то изменить, вы должны изменить его во многих местах.

Если вы используете один класс контроллера для одного вида таблицы, вам не нужно будет вообще проверять.

  1. написать класс контроллера для каждого Tableview, сделать это в соответствии с протоколом UITableViewDatasource
    • реализовать методы протокола вам понадобятся.по крайней мере
      • – numberOfSectionsInTableView:,
      • – tableView:numberOfRowsInSection:,
      • – tableView:cellForRowAtIndexPath:
  2. вызов -setDataSource: для каждого Tableview к объекту правого класса контроллера

Я думаю, это был показан в одном из WWDC 2010 videos. Я не уверен, но я думаю, это было Сессия 116 - Модель-View-Controller для iPhone OS.

редактировать

Я написал пример кода: http://github.com/vikingosegundo/my-programming-examples

+0

и как мы это делаем? Что вы подразумеваете под контролем? Извините, я довольно новичок: s – awlcs

+0

Я ищу пример прямо сейчас. пожалуйста, оставайтесь с нами :) – vikingosegundo

+0

спасибо: D Я тоже искал пример, но мне не удалось найти :( – awlcs

0

На одном контроллере представления, если вы должны использовать две таблицы, то вы можете установить IBOutlet для обеих таблиц или назначает другой тег к ним так, когда вам используйте следующий cellForRowAtIndexPath вы можете дифференцироваться в обеих таблицах ниже

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCellStyle style =UITableViewCellStyleSubtitle; 
    static NSString *MyIdentifier = @"MyIdentifier"; 
    DataListCell *cell = (DataListCell*)[tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

    cell = [[DataListCell alloc] initWithStyle:style reuseIdentifier:MyIdentifier]; 

    cell.selectionStyle=UITableViewCellSelectionStyleNone; 



     if(tableView==tblLanguage)//tblLanguage IBOutlet for first table 
     { 
      if ((selectedIndexPath != nil) && (selectedIndexPath.row == indexPath.row)) 
      { 

       UIImageView *imgView=[[UIImageView alloc]initWithFrame:CGRectMake(320-30, 9, 22, 15)]; 
       imgView.image=[UIImage imageNamed:@"btn_Expand.png"]; 
       [cell addSubview:imgView]; 



       tblSongs.hidden=NO; 
       tblSongs.frame=CGRectMake(0,42, 320, ([arrSongListForSpecificLanguage count]*40)); 
       [cell addSubview:tblSongs]; 
      } 
      else 
      { 
       UIImageView *imgView=[[UIImageView alloc]initWithFrame:CGRectMake(320-30, 9, 16, 22)]; 
       imgView.image=[UIImage imageNamed:@"btn_Collaps.png"]; 
       [cell addSubview:imgView]; 
      } 


      cell.lblCustomerName.textColor=[UIColor blackColor]; 
      cell.lblCustomerName.font=[UIFont boldSystemFontOfSize:16]; 




      //set the first label which is always a NamesArray object 
      [cell setcustomerName:[objAppDelegate.viewController.arrLanguage objectAtIndex:indexPath.row]]; 
     } 
     else //for other table 
     { 
      ParseData *objParse; 
      objParse=[arrSongListForSpecificLanguage objectAtIndex:indexPath.row]; 



      cell.lblCustomerName.textColor=[UIColor blackColor]; 
      cell.lblCustomerName.frame=CGRectMake(cell.lblCustomerName.frame.origin.x, cell.lblCustomerName.frame.origin.y, 310, cell.lblCustomerName.frame.size.height); 


      //set the first label which is always a NamesArray object 
      [cell setcustomerName:objParse.track]; 

     } 
     return cell;  
    } 


} 

вы также можете использовать тег для того же, в котором ваш, если заявление, как показано ниже если (tableView.tag == 1) // tblLanguage тег = 1

Похожие если использовать оператор для других методов делегата & DATASOURCE таблицы

Смежные вопросы