Подтвердить что ты не робот

Просмотр статической таблицы внутри UIViewController [Xcode 5]

Я знаю, что проблема не в том, что в UIViewController нет содержимого статического представления таблицы

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

Спасибо заранее.

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: при последнем обновлении (Xcode 5.1) кажется, что статические ячейки в регулярном UIViewController больше не могут быть помещены. Однако мой ответ по-прежнему применяется к UITableViewController.


Да, в UIViewController вы можете иметь статическое представление табличного представления.

Все, что вам нужно сделать, это:

-Создайте статические ячейки таблицы в построителе интерфейса и создайте их так, как вам нравится.

-Удалить источник данных представления данных представления UIViewController и делегировать:

@interface MyViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

-Connect делегат представления таблицы и dataSource для контроллера представления в построителе интерфейса

-Implement -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section, чтобы вернуть число ваших ячеек. (например, return 10, да просто, как это)

- Соедините ваши ячейки с вашим кодом как IBOutlets в Interface Builder. ВАЖНО: Убедитесь, что они strong, слабый не будет работать. например @property (strong, nonatomic) IBOutlet UITableViewCell *myFirstCell;

-Implement -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath, чтобы вернуть правильную ячейку в путь указателя. например:

int num = indexPath.row;
UITableViewCell *cell;
switch (num) {
    case 0:
        cell = self.myFirstCell;
        break;
    case 1:
        cell = self.mySecondCell;
        break;
}
return cell;

Если вы примените все эти шаги, у вас должны быть рабочие статические ячейки, которые работают для таблиц с небольшим количеством ячеек. Идеально подходит для таблиц, в которых у вас есть несколько (возможно, не более 10-20) контента. Несколько дней назад я запускал ту же проблему, и я подтверждаю, что она работает. Подробнее о моем ответе здесь: Лучший подход для добавления Static-TableView-Cell в UIViewcontroller?

Ответ 2

Там можно улучшить способ ответа.

Соедините ваши ячейки с кодом не как IBOutlet, а как IBOutletCollection. Если вы назовете его, например, ячейки ваш код будет выглядеть так, что делает его немного чище:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.cells.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return self.cells[indexPath.row];
}

Порядок, в котором вы соединяете ячейки с коллекцией розетки, будет порядком, который вы видите при запуске приложения.

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

Ответ 3

Это моя попытка:

enter image description here

Я создал представление контейнера и Table View Controller. Затем я открыл исходный код раскадровки и изменил идентификатор места назначения контейнера на идентификатор контейнера табличного представления. Теперь сделайте статический контроллер табличного представления...

UPDATE:

Просто Ctrl + перетащить из ContainerView в UITableViewController!

ОБНОВЛЕНИЕ 2:

Установите класс контроллера встроенного вида для кузнеца как MYStaticTableViewController, ведь этот метод должен иметь только -prepareForSegue для вызова родительского контроллера:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([self.parentViewController respondsToSelector:@selector(prepareForSegue:sender:)])
        [self.parentViewController prepareForSegue:segue sender:sender];
}

ОБНОВЛЕНИЕ 3:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    if ([self.parentViewController respondsToSelector:@selector(shouldPerformSegueWithIdentifier:sender:)])
        return [self.parentViewController shouldPerformSegueWithIdentifier:identifier sender:sender];
    return YES;
}

Ответ 4

Может ли решение переломиться в XCode 5.1: (

Я нашел обходное решение, которое основывается на одной и той же базовой идее, но, к сожалению, требует немного большего участия: http://www.codebestowed.com/ios-static-tableview-in-uiviewcontroller/

Подводя итог, вы можете добавить TableViewCells непосредственно в представления (и создавать из них IBOutlets и т.д.), но для того, чтобы они могли "перемещаться" в TableView правильно, вам нужно удалить их из представления в коде и вам также необходимо установить ограничения Auto-Layout в IB.

Ответ 5

Как упоминалось выше, Dannie P, использование IBOutletConnection - путь. Чтобы прояснить это немного дальше:

Возьмите первую ячейку из своего статического вида таблицы и ctrl + перетащите ее в свой UITableViewController. В окне свойств подключения выберите Outlet Collection в выпадающем меню Connection.

В итоге вы получите код, похожий на этот:

@property (strong, nonatomic) IBOutletCollection(UITableViewCell) NSArray *cells;

Затем ctrl + перетащите все остальные ячейки (по одному за раз) в созданное вами свойство в том порядке, в котором вы хотите, чтобы они отображались в вашем представлении статической таблицы.