UIViewController показывает два UITableView

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

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

Установка рамки ни на что не влияет...


person Community    schedule 18.03.2010    source источник
comment
Привет @bresc, я так понимаю, ты так и не понял, почему в твоем контроллере представления появилось второе табличное представление? У меня такая же проблема. Так странно. Используя отладчик, я вижу, что свойство представления моего viewController устанавливается в объект UITableview после того, как я представляю его модально, но до запуска viewDidLoad в контроллере представления.   -  person kris    schedule 18.11.2011
comment
@kris Нет, я так и не нашел решения. Мой проект был в самом начале, когда у меня возникла проблема, поэтому я просто сделал эту часть совершенно другой, чтобы заставить ее работать.   -  person    schedule 01.12.2011
comment
Спасибо бреск. Единственное, что я заметил с тех пор, это то, что добавление файла пера и загрузка из него контроллера представления, похоже, устраняет проблему. Я обновлю снова, если когда-нибудь доберусь до сути этого.   -  person kris    schedule 06.12.2011


Ответы (3)


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

Создайте свойство _tableview в своем RootviewController с помощью IBOutlet. И свяжите его с таблицей в вашем XIB.

Не выделяйте _tableview в RootviewController и не добавляйте к нему подвид .

person munibsiddiqui    schedule 24.05.2012

Вместо этого,

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

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

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

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

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

person Tom Irving    schedule 18.03.2010
comment
Извините, неправильно вставил. Смотрите обновленную версию, также я не использую IB - person ; 18.03.2010
comment
Вы уверены, что используете UIViewController, а не UITableViewController? Не должно быть причин для существования UITableView в UIViewController. - person Tom Irving; 18.03.2010
comment
Я тогда совсем запутался. UIViewController не должен создавать для вас UITableView. - person Tom Irving; 18.03.2010
comment
Ну и я тоже. Я уверен, что в моем коде есть какая-то логическая ошибка, но я просто не смог ее найти. Итак, я начал новый проект... скопировал все необходимые файлы и снова шаг за шагом переписал AppDelegate и рассматриваемый UIViewController... теперь это работает. Конечно, я сделал кое-что по-другому, но я до сих пор не знаю, в чем причина проблемы. - person ; 19.03.2010

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

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

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

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

person BufferStack    schedule 28.12.2011