Как управлять 2 UITableView (мастер и детали) в 1 UIView - PullRequest
0 голосов
/ 29 ноября 2011

Я хотел бы отобразить 2 UItableView на том же UIView.Важная вещь: когда я выбираю строку в первой таблице (master), я хочу отобразить строки подробностей во второй таблице (detail).

Для этого у меня есть:

  • создано 1 UIViewController с 2 UITableView свойствами IB Outlet, связанными с 2 таблицами в раскадровке
  • установить делегат и источник данных для обоих UITableView в корне UIViewController
  • создано 1 UITableViewController для каждого UITableView
  • реализованы все необходимые методы для обоих делегатов

Мне удается отобразить данные в первой таблице, но не во второй, хотя tableView:numberOfRowsInSection: правильно для двух таблиц.

Когда я запускаю свое приложение в режиме отладки, я не вижу никакого вызова tableView:cellForRowAtIndexPath: метод для таблицы с подробностями.

Я не понимаю, что я пропустил или где я не прав.Кто-нибудь может мне помочь?

Вот части моего кода:

RootViewController.h

@interface RootViewController : UIViewController 
{
    MasterTVController * masterController;
    IBOutlet UITableView * masterTV;
    IBOutlet UITableView * detailTV;
}

RootViewController.m

-(void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    if (masterController == nil) {
        masterController = [[masterTVController alloc] init];
    }
    [masterTV setDataSource:masterController];
    [masterTV setDelegate:masterController];
    masterController.view = masterController.tableView;

    [detailTV setDataSource:masterController.detailTVController];
    [detailTV setDelegate:masterController.detailTVController];
}

MasterTVController.ч

@interface MasterTVController : UITableViewController <UITableViewDataSource, UITableViewDelegate>
{
    NSMutableArray * masterArray;
    NSMutableArray * detailArray;
    DetailTVController * detailTVController;
}

MasterTVController.m

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        self.detailTVController = [[DetailTVController alloc] init];
        self.detailTVController.view = self.detailTVController.tableView;
    }
    return self;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.detailArray = [[self.masterArray objectAtIndex:indexPath.row] objectForKey:@"details"];
    self.detailTVController.dataArray = detailArray;
    [self.detailTVController.tableView reloadData];
}

1 Ответ

0 голосов
/ 30 ноября 2011

Я подозреваю, что для вашего detailTVController.tableView не установлено значение detailTV, поэтому последняя строка в tableView:didSelectRowAtIndexPath: не отправляет reloadData в нужное представление таблицы.Попробуйте добавить это в viewDidLoad:

masterController.detailTVController.tableView = detailTV;

Возможно, вам также потребуется установить masterController.tableView аналогичным образом.

Кроме того, одна из этих двух строк кажется подозрительной:

[menusTV setDataSource:masterController];
[masterTV setDelegate:masterController];
...