根据方向更改UITableViewCell的内容

时间:2014-02-22 09:18:28

标签: ios objective-c uitableview

我有一个UITableViewController,它显示自定义类型的NSArray的属性。在纵向方向时,我想要显示三个标签(像列一样)但在横向时我可以更多地放在UITableViewCell上,我想要显示5个标签。

目前,我正在故事板编辑器中的原型单元格上布置我的肖像单元格,方法是将UILabels放在UITableViewCell上并对其进行标记,以便我可以访问子视图并设置文本cellForRowAtIndexPath方法。我开始沿着这条路走下去,以便轻松使用我的标签的自动布局。

我发现很多建议可以在方向更改时重新调整/移动单元格上的项目,但不能更改可见的子视图数量。我正在考虑尝试使用两个不同的单元格标识符(一个具有更多横向模式标签)并根据[UIDevice currentDevice].orientation选择我想要的标识符。我想还需要在旋转时强制重新加载单元格。

有更简单/更好的方法吗?

3 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。只需使用唯一标识符开发2个不同的原型,根据当前方向在cellForRowAtIndexPath中提供它们。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {

        LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"portraitCell" forIndexPath:indexPath];

        // configure cell

        return cell;

    } else {

        LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"landscapeCell" forIndexPath:indexPath];

        // configure cell

        return cell;
    }
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [self.tableView reloadData];
}

如果单元格中包含更多标签,您只需为这些标签创建其他IBOutlet,并将现有标签重复用于两个方向中使用的标签。

编辑:在方向更改时重新加载表格。

答案 1 :(得分:1)

您可以交换整个数据源并委托,甚至可以更换方向更改的整个视图。根据您需要配置的数量,这可以使您的代码更清洁。 Apple有一个很好的指南: https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html#//apple_ref/doc/uid/TP40007457-CH7-SW14

答案 2 :(得分:0)

另一个选项是UICollectionViewController。 UIkit中的表是针对一个列创建的,而collectionView则针对更复杂的布局,就像您想要实现的那样。