2013-08-26 2 views
0

Редактировать: предложенный «Возможно, у этого вопроса уже есть ответ:« это не то же самое, что я спрашиваю! Я постараюсь лучше объяснить свою проблему.Как настроить пользовательский класс UITableViewController программно

Это моя раскадровка

enter image description here

UITableViewController, имеет общий UITableCell (MMSwitchTableCell), который имеет изображение, метку и переключатель.

Идея состоит в том, чтобы иметь возможность создавать различные UITableViewControllers, которые представляют разные данные с одним и тем же макетом i.e с одним и тем же объектом ячейки & такое же поведение. например, один раз UITableView имеет список ячеек, который помогает вам выбирать фрукты, второй UITable помогает выбрать мебель. Два UITablesViewController имеют без отношения между ними (без наследования или агрегации), они разные экземпляры в разных viewControllers, я только хочу повторно использовать запроектированный элемент управления и код UITableCell.

мой код имеет UIViewController, где я объявляю свойство:

@property (strong, nonatomic) MMGoSeePopoverTableViewController* goSeePopoverTableViewController; 

и ленивые нагрузки это:

-(MMGoSeePopoverTableViewController*) goSeePopoverTableViewController 
{ 
    if(_goSeePopoverTableViewController == nil) 
    { 
     _goSeePopoverTableViewController =(MMGoSeePopoverTableViewController*) 
     [self.storyboard instantiateViewControllerWithIdentifier:@"switchPopover"]; 
    } 

    return _goSeePopoverTableViewController; 
} 

и второй UIViewController, в котором я объявляю свойство:

@property (strong, nonatomic) MMLayersPopoverTableViewController* layersPopoverTableViewController; 

и ленивый груз:

-(MMLayersPopoverTableViewController*) layersPopoverTableViewController 
{ 
    if(_layersPopoverTableViewController == nil) 
    { 
     _layersPopoverTableViewController =(MMLayersPopoverTableViewController*) 
     [self.storyboard instantiateViewControllerWithIdentifier:@"switchPopover"]; 
    } 

    return _layersPopoverTableViewController; 
} 

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

спасибо за вашу помощь

+0

Что ваша цель этого требования? Один вид должен привязываться к одному ViewController. –

+0

@ 0x7fffffff благодарю вас за ссылку, к сожалению, вы не поняли, что я прошу, поэтому я отредактировал вопрос, надеюсь, теперь его ясно, и вы сможете помочь –

ответ

0

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

Это звучит как случай, когда вы должны использовать .xib-файл вместо раскадровки. Преимущество раскадровки по сравнению с файлами .xib заключается в том, что вы можете увидеть структуру приложения с точки зрения представлений и соответствующих контроллеров представления. В вашем случае, однако, вы пытаетесь использовать повторное использование того же вида с разными контроллерами. Помещение таблицы в файл .xib, принадлежащий контроллеру представления, позволит вам загружать одну и ту же таблицу, ячейку и т. Д. С помощью любого контроллера представлений, который вы решите создать.

В вашем .xib-файле задайте тип прокси-сервера владельца файла для некоторого общего суперкласса всех классов контроллера вида, который содержит всю необходимую функциональность. Например, если все ваши контроллеры представлений получены из UITableViewController, и вам не нужны какие-либо специальные розетки, установите тип UITableViewController и подключите таблицу к розетке tableView прокси.Если ваши контроллеры представлений имеют другое общее поведение, поместите все это в подкласс UITableViewController, используйте его как тип прокси и выведите другие контроллеры представлений из этого класса.

После того, как вы сделали все, что вы можете использовать метод -initWithNibName:bundle: для инициализации любого из контроллеров просмотреть и загрузить тот же вид:

// in one place... 
MMGoSeePopoverTableViewController *goSeeVC = [[MMGoSeePopoverTableViewController alloc] 
               initWithNibName:@"CommonTableView.xib" bundle:nil"]; 
// and in some other place... 
MMLayersPopoverTableViewController *layersVC = [[MMLayersPopoverTableViewController alloc] 
               initWithNibName:@"CommonTableView.xib" bundle:nil"]; 
+0

, можете ли вы рассказать о том, как подключить таблицу к выходной стол для прокси-сервера? можете ли вы разместить для этого код? благодаря! –

+0

Просто управляйте перетаскиванием из таблицы в значок «Значок файла» в IB так же, как и к любой другой розетке. – Caleb

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