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

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

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

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

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

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

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

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 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];