2010-03-18 5 views
2

У меня есть странная проблема.UIViewController показывает два UITableView

Я подклассифицирую 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); 

Установка рамы не имеет никакого эффекта ...

+0

Привет @bresc, я так понимаю, вы никогда не дошли до того, почему в вашем диспетчере просмотра появился второй стол? У меня такая же проблема. Так странно. Используя отладчик, я вижу, что мое свойство viewController's view устанавливается в объект UITableview после того, как я представляю его по-разному, но перед запуском viewDidLoad в контроллере представления. – kris

+0

@kris Нет. Я не нашел решения. Мой проект был в основном в начале, когда у меня была проблема, поэтому я просто сделал эту часть совершенно другой, чтобы заставить ее работать. – 2011-12-01 19:07:14

+0

Спасибо bresc. Единственное, что я заметил, это то, что добавив файл nib и загрузив из него контроллер вида, похоже, проблема исчезла. Я обновлю, если я когда-нибудь дойду до конца. – kris

ответ

0

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

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

вы пробовали только с помощью:

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

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

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

+0

Извините, это было неправильно. См. Обновленную версию, также я не использую IB – 2010-03-18 17:21:13

+0

Вы уверены, что используете UIViewController, а не UITableViewController? В UIViewController не должно быть никаких оснований для использования UITableView. –

+0

Да, я уверен, – 2010-03-18 20:05:35

0

я столкнулся же вопрос ...

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

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

Надежда это фиксирует его (@kris слишком !)

1

i Если у вас такая же проблема, вы, вероятно, будете конвертировать UITableViewController в UIViewController, а ваш RootViewController может иметь uitableview.

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

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

Смежные вопросы