2 diff UITableViews на одном UIView - PullRequest
       3

2 diff UITableViews на одном UIView

1 голос
/ 08 августа 2011

Можно ли добавить 2 разных UITableViews в один UIView, при этом источник данных и делегат обоих tableViews обрабатываются внутри самого файла класса UIView?

Ответы [ 3 ]

1 голос
/ 08 августа 2011

Да.Обратите внимание на 1-й аргумент всех методов делегата / источника данных.Это ссылка на обрабатываемый tableView.

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

0 голосов
/ 08 августа 2011

Да, это так.Но вам нужно потратить немного усилий, чтобы эта сборка была аккуратной.

Сначала я бы предложил создать объект Controller, который имеет два объекта UITableViewController в качестве свойств.

Они будут управлять представлениями таблицы.

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

@ interface TableViewManager: NSObject {UITableViewController * myTableViewController1;UITableViewController * myTableViewController2;}

@ свойство (неатомное, сохраняемое) UITableViewController * myTableViewController1;@property (nonatomic, retain) UITableViewController * myTableViewController2;

// Они будут реализованы вручную для делегирования соответствующему TableVC @property (nonatomic, assign) id myTableViewDelegate1;@property (nonatomic, assign) id myTableViewDelegate2;@property (nonatomic, assign) id myTableViewDataSource1;@property (nonatomic, assign) id myTableViewDataSource2;

@ end

@ реализация

@ synthesize myTableViewController1, myTableViewController2;

  • (id) init {if ((self = [super init])) {// на самом деле вы можете перенести эти строки в кончик, определив UITableViewController-подобный объект.self.myTableViewController1 = [UITableViewController alloc] initWithStyle: ITableViewStylePlain];self.myTableViewController1 = [UITableViewController alloc] initWithStyle: ITableViewStylePlain];}

    return self;}

// Пример для 1 установщика, остальные свойства присвоения будут похожи - (void) setMyTableViewDelegate1: (id) aDelegate {self.myTableViewController1.delegate = aDelegate;}

  • (void) dealloc {self.myTableViewDelegate1 = nil;self.myTableViewDelegate2 = nil;self.myTableViewDataSource1 = nil;self.myTableViewDataSource2 = nil;

    self.myTableViewController1 = nil;self.myTableViewController2 = nil;

    [super dealloc];}

@ end

После того, как этот класс был инициализирован, вы можете назначить tableViews из каждого контроллера табличного представления вашему UIView, применив сообщение addSubview:.

У вас есть преимущество чистой структуры и никаких проблем с раздутыми классами.

Если вы хотите и / или нуждаетесь в этом, вы можете определить свой собственный класс UITableViewController и изменить его, например, в соответствии со своими потребностями.что он использует пользовательскую производную UITableView.

0 голосов
/ 08 августа 2011

Прежде всего, вам, вероятно, не следует помещать код делегата в сам файл класса UIView в соответствии с шаблонами MVC.Подумайте о том, чтобы вместо этого использовать обработчик UIViewController, и оставьте UIView для обработки только тех вещей, которые касаются того, как и где что-то нарисовано.

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

Вы можете сохранить хранилищеUITableView указывает как IVars в вашем классе контроллера, чтобы искать их позже.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == myFirstTableView) {
        return myFirstTableViewHeight;
    else if (tableView == mySecondTableView) {
        return mySecondTableViewHeight;
    }

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