UIViewController显示两个UITableView

发布于 2024-08-26 02:18:21 字数 2061 浏览 4 评论 0原文

我有一个奇怪的问题。

我对 UIViewController 进行子类化并添加一个 tableView 属性,在其中加载 UITableView。 现在我将此 UITableView 添加到父视图的子视图中。 工作正常,但我得到两个 TableViews。一种是标准样式的 TableView,另一种是我希望它位于标准样式之上的方式。但两者都包含正确的数据。

@interface RootViewController : UIViewController <ABPersonViewControllerDelegate, UITableViewDelegate, UITableViewDataSource> {
  UITableView *tableView;
  ToolbarController *toolbar;
  ...
}

@property(nonatomic, retain) UITableView *tableView;
@property(nonatomic, retain) ToolbarController *toolbar;
...

@end

@implementation RootViewController
- (void)viewDidLoad {
  [super viewDidLoad];

  CGRect mainViewBounds = self.parentViewController.view.bounds;
  CGFloat toolbarHeight = 44;

  toolbar = [[ToolbarController alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(mainViewBounds), toolbarHeight) parentView:self]; 

  tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, toolbarHeight, CGRectGetWidth(mainViewBounds), CGRectGetHeight(mainViewBounds) - toolbarHeight) style:UITableViewStylePlain];
  tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
  tableView.rowHeight = 60.0;
  [tableView tableView].delegate = self;
  [tableView tableView].dataSource = self;
  tableView.backgroundColor = [UIColor clearColor];

  [self.parentViewController.view addSubview:tableView];
  [self.parentViewController.view addSubview:toolbar];
}
@end

-----更新------

我刚刚错误地粘贴了一部分

[tableView tableView].delegate = self;
[tableView tableView].dataSource = self;

,实际上是在代码中

tableView.delegate = self;
tableView.dataSource = self;

-----更新2--------

如果我没有创建自己的 UITableView,

tableView = [[UITableView alloc] ...]

那么系统会自动为我设置一个。 这对我来说很好......我不需要初始化一个,但我无法更改标准框架上的框架。

tableView.frame = CGRectMake(0, toolbarHeight, CGRectGetWidth(mainViewBounds), CGRectGetHeight(mainViewBounds) - toolbarHeight);

设置框架没有任何影响...

I have a weird problem.

I'm subclassing UIViewController and adding a tableView property in which I load a UITableView.
Now I'm adding this UITableView to the parent's subviews.
Works fine but I get TWO TableViews. One standard styled TableView and one the way I wanted it to be on top of the standard one. Both contain the correct data though.

@interface RootViewController : UIViewController <ABPersonViewControllerDelegate, UITableViewDelegate, UITableViewDataSource> {
  UITableView *tableView;
  ToolbarController *toolbar;
  ...
}

@property(nonatomic, retain) UITableView *tableView;
@property(nonatomic, retain) ToolbarController *toolbar;
...

@end

@implementation RootViewController
- (void)viewDidLoad {
  [super viewDidLoad];

  CGRect mainViewBounds = self.parentViewController.view.bounds;
  CGFloat toolbarHeight = 44;

  toolbar = [[ToolbarController alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(mainViewBounds), toolbarHeight) parentView:self]; 

  tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, toolbarHeight, CGRectGetWidth(mainViewBounds), CGRectGetHeight(mainViewBounds) - toolbarHeight) style:UITableViewStylePlain];
  tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
  tableView.rowHeight = 60.0;
  [tableView tableView].delegate = self;
  [tableView tableView].dataSource = self;
  tableView.backgroundColor = [UIColor clearColor];

  [self.parentViewController.view addSubview:tableView];
  [self.parentViewController.view addSubview:toolbar];
}
@end

------UPDATED------

I just wrongly pasted one part

[tableView tableView].delegate = self;
[tableView tableView].dataSource = self;

is actually in code

tableView.delegate = self;
tableView.dataSource = self;

-------UPDATE 2--------

If I don't create my own UITableView by

tableView = [[UITableView alloc] ...]

then there is one automatically set for me.
This would be fine for me... I don't need to init one, but I can't change the frame on the standard one.

tableView.frame = CGRectMake(0, toolbarHeight, CGRectGetWidth(mainViewBounds), CGRectGetHeight(mainViewBounds) - toolbarHeight);

Setting frame has no effect whatsoever...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情绪操控生活 2024-09-02 02:18:21

我遇到了同样的问题,您可能正在将 UITableViewController 转换为 UIViewController,并且您的 RootViewController 可能有 uitableview。

使用 IBOutlet 在 RootviewController 中设置 _tableview 的属性。并将其与 XIB 中的 tableview 链接。

不要在 RootviewController 中分配 _tableview 并且不要 addsubview 它。

i Had the same issue you probably be converting the UITableViewController to UIViewController and Your RootViewController might have the uitableview.

Make the Property of _tableview in your RootviewController with IBOutlet. And link it with the tableview in your XIB .

Don't alloc _tableview in RootviewController and Don't addsubview it .

请你别敷衍 2024-09-02 02:18:21

相反,

[tableView tableView].delegate = self;
[tableView tableView].dataSource = self;

您是否尝试过仅使用:

tableView.delegate = self;
tableView.dataSource = self;

我不知道为什么会这样,但这是唯一突出的事情。还要确保您没有在 IB 中设置另一个 UITableView。

它也可能与toolbarController有关。
我假设它是一个自定义类,所以请确保您没有在其中创建 UITableView。

Instead of this,

[tableView tableView].delegate = self;
[tableView tableView].dataSource = self;

Have you tried just using:

tableView.delegate = self;
tableView.dataSource = self;

I don't know why it would be that, but it's the only thing that's standing out. Also make sure you haven't got another UITableView set up in IB.

It might also have something to do with toolbarController.
I'm assuming it's a custom class, so make sure you're not creating a UITableView in that.

余生一个溪 2024-09-02 02:18:21

我遇到了同样的问题...

而不是直接将 tableview 添加到视图控制器([self.parentViewController.view addSubview:tableView];),而是使用以下方式..

UIView *totalView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[totalView addSubview:tableView];
self.view=totalView;

希望这可以解决它(对于@克里斯也是!)

I ran into same issue...

Instead of adding tableview to the view controller directly ([self.parentViewController.view addSubview:tableView];), use following way..

UIView *totalView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[totalView addSubview:tableView];
self.view=totalView;

Hope this fixes it (for @kris too!)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文