Как визуально создавать и использовать статические ячейки в UITableView, встроенном в UIViewController


Я использую XCode 4.2 и построил свой пользовательский интерфейс с помощью раскадровки. Мне нужно создать представление, которое имеет содержимое выше и ниже UITableView, и я могу достичь этого с помощью UIViewController. UITableViewController не позволяет добавлять содержимое выше или ниже таблицы. Вы можете использовать верхний/нижний колонтитул таблицы, но это не работает для того, что я хотел бы достичь.

теперь у меня есть UIViewController с встроенным в него UITableView. Я могу отрегулировать высоту и ширину UITableView соответственно, который предоставляет мне макет пользовательского интерфейса, который я ищу.

Я могу настроить статические ячейки в UITableView, но когда я пытаюсь построить я получаю следующую ошибку:

Незаконная конфигурация: статические табличные представления допустимы только при внедрении в экземпляры UITableViewController

мой вопрос в том, как другие все это? Создание tableview со статическими ячейками и их визуальное размещение очень приятно, но по-видимому, это не разрешено по какой-то причине, которую я не могу понять. Я не могу переключиться на UITableViewController из-за моих визуальных требований к макету.

любая помощь была бы весьма признательна.

6 53

6 ответов:

вы правы. В раскадровке вы не можете иметь tableView со статическими ячейками, встроенными в viewController. Один из способов обойти это (я сам не пробовал, поэтому я не уверен, что это работает) может быть то, что вы создаете экземпляр UITableViewController в раскадровке со статическими ячейками. Добавьте экземпляр UIView в свой viewController, а затем программно загрузите tableView UITableViewController в UIView вашего viewController.

вы можете достичь этого в Xcode 4.5 и более поздних версиях, предполагая, что ваше приложение предназначено для iOS 6+.

в раскадровке просто создайте UIViewController с контейнером представления внутри его основного вида. Затем подключите этот контейнер представления к UITableViewController, который содержит статические ячейки.

вот так:

enter image description here

вам не нужна ни одна строка кода. Просто нажмите кнопку, перетащить и выберите Вставить. Сдерживание контроллера вида является справился за тебя.

ответ 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 со статическими ячейками.

Я знаю, что это старый вопрос, но у меня есть обрывочное решение этой проблемы.

Мне нужно было 3 статические ячейки на UIViewController так что это то, что я сделал:

  1. перетащите некоторые ячейки таблицы в свой интерфейс (не в UITableView) - добавьте текст и все, что вам нужно.
  2. сделайте свойства IBOutlet для ваших клеток и синтезируйте их.
  3. перетащите кнопку и сделать его охватить всю ячейку. Установите кнопку для ввода "Custom", чтобы она отображалась невидимый-повторите для всех ячеек
  4. добавить цифровые теги к кнопкам
  5. реализовать следующие функции. buttonDown подключается к событию кнопки "Touch Down". buttonUp подключается к 'Touch Up Inside'и 'Подправить Снаружи'

    -(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 и использовать кнопку, чтобы перейти непосредственно к новому виду. Я нахожу это довольно полезным.

Я не уверен, что вы подразумеваете под статическими ячейками, но если вы пытаетесь построить ячейки В IB, а затем хотите использовать его в своем tableView, что вы могли бы сделать в своем cellForRowAtIndex можно назвать loadNibNamed передача имени .файл nib, созданный для ячеек в качестве параметра. Убедитесь, что у вас есть outlet в вашем viewController, который сопоставляется с ячейкой .перо. Попробуйте исследовать в этих направлениях, если это то, что вы пытаетесь достичь

вы можете сделать его динамическим, а затем переключить прокрутку:

[yourTableName setScrollEnabled:NO];