UIViewController показывает два UITableView - PullRequest
2 голосов
/ 18 марта 2010

У меня странная проблема.

Я создаю подкласс UIViewController и добавляю свойство tableView, в которое я загружаю UITableView. Теперь я добавляю этот UITableView к родительским подпредставлениям. Работает нормально, но я получаю TWO 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);

Настройка рамки никак не влияет ...

Ответы [ 3 ]

1 голос
/ 24 мая 2012

У меня была та же проблема, что вы, вероятно, конвертировали UITableViewController в UIViewController, и ваш RootViewController мог иметь uitableview.

Создайте свойство _tableview в вашем RootviewController с IBOutlet. И свяжите это с табличным представлением в вашем XIB.

Не размещать _tableview в RootviewController и не добавлять его в.

0 голосов
/ 28 декабря 2011

Я столкнулся с той же проблемой ...

Вместо непосредственного добавления таблицы в контроллер представления ([self.parentViewController.view addSubview:tableView];) используйте следующий способ.

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

Надеюсь, это исправит (и для @kris!)

0 голосов
/ 18 марта 2010

Вместо этого

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

Вы пробовали просто использовать:

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

Я не знаю, почему это так, но это единственное, что выделяется. Также убедитесь, что в IB не настроен еще один UITableView.

Это также может быть связано с toolbarController. Я предполагаю, что это пользовательский класс, поэтому убедитесь, что вы не создаете в нем UITableView.

...