Как программно назначить / заменить существующий UITableView новым? - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть следующий код для реализации моего класса UIViewController:

- (void)viewDidLoad {
    CustomUITableView *customUITableView = [[CustomUITableView alloc] initWithFrame:self.view.frame];        
    [self.view addSubview:customUITableView];    
    [super viewDidLoad];
}

Когда я запускаю приложение, таблица отображается очень хорошо.У меня есть две проблемы с этим подходом:

  1. Я теряю использование StoryBoard, так как таблица динамически добавляется в представление.Я хотел бы упорядочить свое представление в StoryBoard и не нужно вручную изменять его положение в коде.
  2. Я также хочу иметь возможность переключаться между CustomUITableViews во время выполнения (если это возможно).Например, если я создаю «CustomUITableView_Number2», могу ли я просто решить, какой пользовательский класс я хочу использовать для таблицы во время выполнения?

Я знаю, что могу добиться этого в StoryBoard, назначив пользовательский классв UITableView, но я хочу увидеть, как далеко я могу пойти, используя только код.Моя цель - организовать макет с помощью StoryBoard, но назначить нужный класс во время выполнения.

Кто-нибудь знает, возможно ли это?Пример кода действительно поможет.Спасибо вам.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

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

- (void)viewDidLoad {

    //Your tableView was already loaded
    CustomUITableView *customUITableView = [[CustomUITableView alloc] initWithFrame:tableView.frame style:tableView.style];   
    customUITableView.backgroundColor = tableView.backgroundColor;
    //...
    //... And any other properties you are interested in keeping 
    //...    
    [self.view addSubview:customUITableView];    
    [super viewDidLoad];
}

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

0 голосов
/ 08 февраля 2012

уверен, что вы можете заменить таблицу.что-то такое простое, как

Class MyTableClass = NSClassFromString(@"WhateverClass");
    id newTableView = [[MyTableClass alloc] init];
    [newTableView performSelector:@selector(someSel:)];

. Убедитесь, что вы сначала установили свой источник данных и делегат, а также любые свойства из исходного экземпляра nib-экземпляра, затем вы можете установить локальное свойство tableview для этого нового объекта и до тех пор, покаivar имеет правильное приведение, которое вы можете вызывать на нем, не прибегая к вызовам во время выполнения, как описано выше.

Вы также можете копаться в среде выполнения obj-c, если вы хотите сделать это по-другому.https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

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