Как сделать два табличных представления в служебном приложении? - PullRequest
0 голосов
/ 18 марта 2011

Я пытался создать две таблицы в служебном приложении, но у меня возникли проблемы; когда я создаю два делегата и два источника данных, я получаю сообщение об ошибке. Есть ли способ сделать несколько делегатов в одном классе?

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Сохраняйте единичные функции ваших делегатов и источников данных.

Просто используйте приведенный ниже подход и поместите в начало каждой функции (Just Sample).

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
        if(myTableOne == tableView)  
        {
            return 5;
        }
        else if(myTableSecond == tableView)
       {
          return 10;
       }
}
0 голосов
/ 18 марта 2011

На самом деле вы не можете поместить два делегата и два источника данных для двух таблиц в один контроллер представления.

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

Например:

Если у меня есть 2 таблицы, одна для Покупка и одна для Продажа

Я установлю UILabel с именем скажем tableIdentifier

tableIdentifier.text = @"Buy";

когда я хочу загрузить Buy table

и аналогично установленному

tableIdentifier.text = @"Sale";

когда я хочу загрузить Sale стол

Теперь, что касается методов источника данных и делегата, вот как это происходит:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     int rows = 0;
      if([tableIdentifier.text isEqualToString:@"Buy"])
      {
          rows = //Your row count for Buy;
      }
      else if([tableIdentifier.text isEqualToString:@"Sale"])
      {
           rows = //Your row count for Sale;
      }

     return rows;
 }

Аналогичным образом он работает для каждого из методов делегата и источника данных на основе значения метки или флага.

Примечание:

Если вы используете метку, как я показал выше, тогда вам нужно outlet эту метку скрытой метке в XIB и @synthesize метку, в противном случае ее значение вернется к нулю в случае, если значение не сохраняется ,

Надеюсь, это поможет вам

EDIT:

В этом случае вы можете считать как [plist1Array count] + [plist2Array count] в numberOfRowsInSection: метод

В методе cellForRowAtIndexPath: вы можете проверить indexPath.row и загрузить данные на основе этого

if(indexPath.row <=[plist1Array count])
{
     //Load data in cell.textLabel.text From `plist1Array`
}
else if(indexPath.row >[plist1Array count] && indexPath.row <[plist2Array count])
{
    //Load data in cell.textLabel.text From `plist2Array`
}

EDIT-1:

Если вы хотите, вы можете просто показать их в разных разделах одной и той же таблицы, а не в двух разных таблицах, таких как

В numberOfRowsInSection: метод

 int j = 0;
 if(indexPath.section == 0)
 {
      j=[plist1Array count];
 }
 else if(indexPath.section == 1) 
 {
      j=[plist2Array count];
 }
 return j;

А в cellForRowAtIndexPath: метод

if(indexPath.section == 0)
{
     //Load data in cell.textLabel.text From `plist1Array`
}
else if(indexPath.section == 1) 
{
    //Load data in cell.textLabel.text From `plist2Array`
}

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...