显示“这是什么?” UITableViewController为空时的消息

时间:2012-09-05 09:01:52

标签: ios cocoa-touch uitableview

我的应用程序包含几个UITableViewControllers,它们在所有情况下都不一定有内容。例如,如果用户没有任何草稿,则“草稿”屏幕为空。

在这种情况下,我想显示一条简短的消息,说明屏幕的用途,例如内置照片应用中的此屏幕:

An iOS navigation bar over a blank screen containing the outlines of two photos, followed by the caption "No Photos or Videos", then the text "You can take photos or videos using the camera, sync photos or videos onto your iPhone using iTunes, or add photos and videos from other albums and events."

在屏幕上获取描述性视图的最佳方法是什么?我不能直接子类化UIViewController,因为我依赖于一些专门与UITableViewController绑定的iOS 6功能,所以据我所知,我必须在UITableView中显示这个视图。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

子类UITableViewController,然后在-viewDidAppear:或其他类似的适当位置,检查表格中的单元格数是否为零。如果是,请添加此叠加层;如果没有,请确保删除叠加层。示例代码如下:

@interface MyTableViewController : UITableViewController
...
@property (nonatomic, weak) UIImageView *informativeOverlayImageView;
...
@end

@implementation MyTableViewController

...

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // Just for an example - you'll have your own logic for determining if there will be zero rows.
    if (self.myDataModel.items.count == 0 &&
        !self.informativeOverlayImageView.superview)
    {
        if (!self.informativeOverlayImageView)
        {
            self.informativeOverlayImageView = [[UIImageView alloc] initwithImage:[UIImage imageNamed:@"someImageName"]];
            [self.informativeOverlayImageView sizeToFit];
        }
        [self.view addSubview:self.informativeOverlayImageView];
    }
    else if (self.myDataModel.items.count > 0 &&
            self.informativeOverlayImageView.superview)
    {
        [self.informativeOverlayImageView removeFromSuperview];
        [self.tableView reloadData]; // Add animations to taste.
    }
}

...

@end

希望这有帮助!