0

Я пытаюсь создать приложение с несколькими видами с шаблоном навигации. Мне нужна таблица в нижней части исходного вида, с другими видами (просмотр изображений, ярлыки и т. Д.) Сверху.Multi-View TableView с RootController

Первоначально я модифицировал RootViewController.xib для изменения размера таблицы и добавил изображение, но ничего не отображалось, кроме таблицы полного размера.

Поэтому я изменил RootViewController.xib, чтобы добавить UIView, а затем добавил UITableView и UIImageView к этому представлению. Я добавил IBOutlet для tableView. В моем RootViewController.xib, владелец файла (RootViewController) имеет выходное соединение с представлением и табличным представлением. Когда я нажимаю правой кнопкой мыши UITableView, я вижу ссылку для ссылки на владельца файла. Когда я нажимаю правой кнопкой мыши UIView, я вижу ссылку для ссылки на владельца файла. (У меня нет выхода в UIImageView, так как я не изменяю код, мне нужен он?).

Однако, когда я запускаю приложение, оно падает с сообщением:

'NSInternalInconsistencyException', 
reason: '-[UITableViewController loadView] loaded the "RootViewController" nib but didn't get a UITableView.' 

Не знаю, почему, как решить. Любая помощь очень глубоко оценена.

Вот метод cellForRowAtIndexPath:

  • (UITableViewCell *) Tableview: (UITableView *) Tableview cellForRowAtIndexPath: (NSIndexPath *) indexPath {

    статическая NSString * QuizIdentifier = @ "QuizIdentifier" ;

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: QuizIdentifier];

    , если (ячейка == ноль) {

    cell = [[[UITableViewCell alloc] 
    
         initWithStyle:UITableViewCellStyleDefault 
    
         reuseIdentifier:QuizIdentifier] 
    
         autorelease]; 
    

    }

    UIImage * _image = [UIImage imageNamed: @ "icon.png"];

    cell.imageView.image = _image;

    NSInteger row = [indexPath row];

    cell.textLabel.text = [_categories objectAtIndex: row];

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    обратная ячейка; }

ОК, здесь идет:

- (UITableViewCell *)tableView:(UITableView *)tableView 
      cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     static NSString *QuizIdentifier = @"QuizIdentifier"; 

     UITableViewCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:QuizIdentifier]; 

     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault 
        reuseIdentifier:QuizIdentifier] 
        autorelease]; 
     } 

     // Configure the cell. 

     UIImage *_image = [UIImage imageNamed:@"icon"]; 
     cell.imageView.image = _image; 

     NSInteger row = [indexPath row]; 
     cell.textLabel.text = [_categories objectAtIndex:row]; 

     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

     return cell; 
    } 

ответ

0

Вы получаете эту ошибку, потому что при создании навигации на базе IOS приложение, Xcode делает RootViewController подкласс UITableViewController. После объединения этого UITableView с нормальным UIView ваш подкласс больше не соответствует классу UITableViewController. Итак, в ваших файлах RootViewController.m и .h измените UITableViewController на UIViewController. Вам также может потребоваться изменить несколько других вещей в вашем методе init, но давайте начнем с этого.

Попробуйте это:

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSLog(@"\n\nI'm in Root/cellForRowAtIndexPath"); 

    static NSString *QuizIdentifier = @"QuizIdentifier"; 

    UITableViewCell *cell = 
    [tableView dequeueReusableCellWithIdentifier:QuizIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] 
       initWithStyle:UITableViewCellStyleDefault 
       reuseIdentifier:QuizIdentifier] 
       autorelease]; 
     UIImage *_image = [UIImage imageNamed:@"icon"]; 
     cell.imageView.image = _image; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } 

    // Configure the cell. 
    NSInteger row = [indexPath row]; 
    cell.textLabel.text = [_categories objectAtIndex:row]; 

    NSLog(@" We are at row %i with label %@ ", row, cell.textLabel.text); 

    return cell; 
} 
+0

ОК, я изменил UITableViewController к UIViewController в RootViewController.h; теперь отображается изображение, как и пустая таблица. Это похоже на обычное приложение на основе View, а не на навигационное приложение. Есть ли причина использовать шаблон навигации в этом случае? – Namhcir

+0

Итак, есть ли проблема, или она работает сейчас? – edc1591

+0

ОК, работает до сих пор; однако у меня возникла проблема с отображением свойств ячейки. Я загружаю cell.textLabel.text из сообщения [array objectAtIndex: row] и отображается правильно; однако, когда я пытаюсь установить тип аксессуара или изображение, которое оно не отображает: cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.imageView.image = [UIImage imageNamed: @ "myImage.png], поэтому я не могу не отображать эти свойства. Любые идеи очень ценятся. – Namhcir

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