使用 UITableViewControllers self.view == self.tableView
。在您的情况下这是一个问题,因为您想要的所需效果需要同级视图(两个视图添加到一个公共超级视图)但 self.tableView 没有“超级视图”。
您必须创建一个新的 UIViewController 子类,其中包含一个 UITableView 和您的广告视图作为两个子视图。您将需要处理诸如设置表格视图的数据源和委托,以及在控制器出现时取消选择表格视图单元格之类的事情。这是一个多一点的工作,需要一些小心,但绝对是可行的。
我在下面汇总了一个快速示例,可以帮助您入门:
// Header
@interface CustomTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
- (id)initWithStyle:(UITableViewStyle)tableViewStyle;
@property (nonatomic, readwrite, retain) UITableView* tableView;
@end
// Source
@interface CustomTableViewController()
@property (nonatomic, readwrite, assign) UITableViewStyle tableViewStyle;
@end
@implementation CustomTableViewController
@synthesize tableView;
@synthesize tableViewStyle = _tableViewStyle;
- (id)initWithStyle:(UITableViewStyle)tableViewStyle {
if ((self = [super initWithNibName:nil bundle:nil])) {
_tableViewStyle = tableViewStyle;
}
return self;
}
- (void)loadView {
[super loadView];
self.tableView = [[UITableView alloc] initWithStyle:self.tableViewStyle];
self.tableView.autoresizingMask = (UIViewAutoresizingMaskFlexibleWidth
| UIViewAutoresizingMaskFlexibleHeight);
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.view addSubview:self.tableView];
// Create your ad view.
...
adView.autoresizingMask = (UIViewAutoresizingMaskFlexibleWidth
| UIViewAutoresizingMaskFlexibleTopMargin);
[self.view addSubview:adView];
[adView sizeToFit];
self.tableView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - adView.frame.size.height);
adView.frame = CGRectMake(0, self.view.bounds.size.height - adView.frame.size.height, self.view.bounds.size.width, adView.frame.size.height);
[self.tableView reloadData];
}
- (void)viewDidUnload {
self.tableView = nil;
[super viewDidUnload];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSIndexPath* selectedIndexPath = [self.tableView indexPathForSelectedRow];
if (nil != selectedIndexPath) {
[self.tableView deselectRowAtIndexPath:selectedIndexPath animated:animated];
}
}
@end