Просмотр статической таблицы внутри UIViewController [Xcode 5]
Я знаю, что проблема не в том, что в UIViewController нет содержимого статического представления таблицы
Я не получаю предупреждение/ошибку, но он также не компилируется. Есть ли трюк или мне нужно использовать старые способы вокруг него?
Спасибо заранее.
Ответы
Ответ 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 + перетащите все остальные ячейки (по одному за раз) в созданное вами свойство в том порядке, в котором вы хотите, чтобы они отображались в вашем представлении статической таблицы.