26

我知道一个无法在 UIViewController 中拥有静态表格视图内容的问题

我没有收到警告/错误,但他也没有编译。有什么诀窍还是我必须使用旧的方法?

提前致谢。

4

5 回答 5

33

更新:随着最新的更新(Xcode 5.1),似乎不再可能将静态单元格放在常规 UIViewController 中。我的回答仍然适用于 UITableViewController。


是的,您可以在 UIViewController 中拥有静态表格视图内容。

您需要做的就是:

- 在界面生成器中创建表格的静态单元格并按照您喜欢的方式设计它们。

- 使 UIViewController 实现表视图的数据源和委托:

@interface MyViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

- 将表视图的委托和数据源连接到界面构建器中的视图控制器

--(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section实现返回您的单元格的数量。(例如return 10,是的,就这么简单)

- 将您的单元格连接到您的代码作为 Interface Builder 中的 IBOutlets。重要提示:确保它们是strong,weak 将不起作用。例如@property (strong, nonatomic) IBOutlet UITableViewCell *myFirstCell;

-实现在索引路径-(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 个就足够了)内容的表格。几天前我遇到了同样的问题,我确认它有效。有关我的答案的更多信息:Best approach to add Static-TableView-Cells to a UIViewcontroller?

于 2013-10-01T07:54:05.010 回答
15

有一种方法可以改善 Can 的答案。

将您的单元格连接到代码,而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];
}

您将单元连接到插座集合的顺序将是您在运行应用程序时看到的顺序。

我可以考虑通过将它们的单元链接到多个出口集合来支持多个部分。

于 2014-01-19T11:02:35.550 回答
4

这是我的尝试:

在此处输入图像描述

我已经创建了容器视图和表视图控制器。然后我打开 Storyboard 的源代码并将容器视图的目标标识符更改为表视图容器标识符。现在使表格视图控制器静态...

更新:

只需 Ctrl+Drag 从 ContainerView 到 UITableViewController!

更新 2:

将嵌入式视图控制器类设置为 smith like 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;
}
于 2014-03-14T20:48:54.300 回答
0

Can 的解决方案确实在 XCode 5.1 中出现问题 :(

我找到了一个基于相同基本思想的解决方法,但不幸的是需要更多的参与: http: //www.codebestowed.com/ios-static-tableview-in-uiviewcontroller/

总而言之,您可以将 TableViewCells 直接添加到视图(并从中创建 IBOutlets 等),但为了使它们正确“移动”到 TableView,您需要在代码中将它们从视图中删除,并且您还需要在 IB 中设置自动布局约束。

于 2014-03-15T10:02:16.370 回答
0

正如 Dannie P 上面提到的,使用 IBOutletConnection 是可行的方法。为了进一步澄清这一点:

从你的静态表格视图中取出第一个单元格,然后 ctrl+将它拖到你的 UITableViewController 中。在连接属性窗口中,选择连接下拉菜单中的 Outlet Collection。

您最终应该得到与此类似的代码:

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

接下来,按您希望它们出现在静态表格视图中的顺序,按住 ctrl+将所有其余单元格(一次一个)拖到您在上面创建的属性上。

于 2014-03-27T08:04:50.823 回答