Как визуально создавать и использовать статические ячейки в UITableView, встроенном в UIViewController
Я использую XCode 4.2 и создаю свой пользовательский интерфейс с помощью раскадровки. Мне нужно создать представление с содержимым выше и ниже UITableView, и я могу это сделать, используя UIViewController. UITableViewController не позволяет добавлять контент выше или ниже таблицы. Вы можете использовать заголовок/нижний колонтитул таблицы, но это не работает для того, что я хотел бы достичь.
Теперь у меня есть UIViewController с встроенным в него UITableView. Я могу настроить высоту и ширину UITableView соответственно, что дает мне макет пользовательского интерфейса, который я ищу.
Я могу настроить статические ячейки в UITableView, но когда я пытаюсь построить, я получаю следующую ошибку:
Нелегальная конфигурация: представления статической таблицы действительны только при встраивании в экземпляры UITableViewController
Мой вопрос: как другие обходят это? Создание табличного представления со статическими ячейками и визуализация их визуально очень приятны, но, по-видимому, это не допускается по какой-то причине, что я не могу понять. Я не могу переключиться на UITableViewController из-за моих требований визуального оформления.
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Вы правы. В раскадровке вы не можете иметь tableView со статическими ячейками, встроенными в viewController. Один из способов обойти это (я сам не пробовал, так что я не уверен, что это работает) может заключаться в том, что вы создаете экземпляр UITableViewController в раскадровке со статическими ячейками. Добавьте экземпляр UIView к вашему контроллеру viewController, а затем программно загрузите tableView из UITableViewController в UIView вашего диспетчера viewController.
Ответ 2
Вы можете достичь этого в Xcode 4.5 и более поздних версиях, предполагая, что ваше приложение нацелено на iOS 6 +.
В раскадровке просто создайте UIViewController с View Container внутри основного вида. Затем подключите View Container к UITableViewController, который содержит статические ячейки.
Точно так же:
![enter image description here]()
Вам не нужна ни одна строка кода. Просто управляйте щелчком, перетаскивайте и выберите вставлять. Консоль контроллера просмотра обрабатывается для вас.
Ответ 3
pmd работает, но в том случае, если требуется обратная совместимость с iOS 5, вы можете сделать вложение программным путем с помощью API View Containment.
В методе viewDidLoad вашего родителя UIViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
MyTableViewController* vc =[storyboard instantiateViewControllerWithIdentifier:@"MyTableVC"];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
// ensure embedded view is aligned to top
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
vc.view.frame = frame;
[vc didMoveToParentViewController:self];
}
Не забудьте указать идентификатор раскадровки для вашего UITableViewController со статическими ячейками.
Ответ 4
Я знаю, что это старый вопрос, но у меня есть лоскутное решение этой проблемы.
Мне нужно было 3 статических ячейки на UIViewController, так вот что я сделал:
- Перетащите некоторые элементы таблицы в свой интерфейс (не в UITableView) - добавьте текст и все, что вам нужно.
- Сделайте свойства IBOutlet для своих ячеек и синтезируйте их.
- Перетащите кнопку и сделайте ее закрытой для всей ячейки. Настройте кнопку "Custom", чтобы она выглядела невидимой - повторите для всех ячеек
- Добавить числовые теги к вашим кнопкам
-
Внедрите следующие функции. buttonDown подключен к событию "Touch Down". buttonUp подключен к "Touch Up Inside" И "Touch Up Outside"
-(IBAction)buttonDown:(id)sender {
if ([sender tag] == 1) {
myFirstCell.selected = YES;
}
else if ([sender tag] == 2) {
mySecondCell.selected = YES;
}
else if ([sender tag] == 3) {
myThirdCell.selected = YES;
}
}
-(IBAction)buttonUp:(id)sender {
myFirstCell.selected = NO;
mySecondCell.selected = NO;
myThirdCell.selected = NO;
}
Вы можете делать все, что захотите, в событии buttonDown и использовать кнопку, чтобы перейти непосредственно к новому представлению. Мне это очень полезно.
Ответ 5
Я не уверен, что вы подразумеваете под статическими ячейками, но если вы пытаетесь создать ячейки в IB, а затем хотите использовать его в своем tableView, то вы можете сделать это в своем cellForRowAtIndex
, который вы можете вызвать loadNibNamed
передать имя файла .nib, созданного для ячеек в качестве параметра. Убедитесь, что у вас есть outlet
в вашем viewController, который сопоставляется с ячейкой .nib. Попробуйте изучить эти направления, если это то, чего вы пытаетесь достичь.
Ответ 6
Вы можете сделать его динамическим, а затем переключить прокрутку:
[yourTableName setScrollEnabled:NO];