Как я могу показать новое представление из UITableViewController, содержащего мой UIViewController?

У меня есть UITableViewController в UIViewController . Хотя этот элемент управления представлением таблицы был единственным, связанным с ним, он просто искажал представления, когда пользователь нажимал строку. Однако, с тех пор как я переместил его как один из двух, содержащихся в UIViewController , UIViewController строк внезапно ничего не делают.

Я пробовал искать, и я не первый, кто столкнулся с этой проблемой, но ни один из ответов не соответствует моим обстоятельствам или у вопросов нет рабочих ответов. Эта ссылка была самой близкой, я нашел, но я не использую раскадровки – я использую отдельные XIB.

Итак, как я могу вывести новый вид из диспетчера view в контроллере view?

Напомним:

  1. Вот что у меня было, и он отлично работал с тем, чтобы вывести пользователей на новый экран!

     // Normal table behavior, as illustrated by [another question][2]. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { SomeView *detailViewController = [[SomeView alloc] initWithNibName:@"SomeView" bundle:nil]; // Pass the selected object to the new view controller. [self.navigationController pushViewController:detailViewController animated:YES]; } 
  2. Теперь у меня есть viewcontroller как свойство в представлении – и приведенный выше код, который находится в файле для tableviewcontroller, а не в главном представлении, не вызывает появление нового экрана!


Спасибо за комментарии! Вот несколько кодов, чтобы прояснить мой сценарий.

  1. Контроллеры в контроллере. Это файл из тестового проекта, который я использовал для тестирования концепции. В этом случае у меня есть контроллер таблицы в контроллере tableview.

     @interface SimpleTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> // This is the controller within the controller @property IBOutlet SecondTableViewController *secondTableController; @property IBOutlet UITableView *secondTable; 
  2. Мой SecondTableViewController имеет этот забавный бит.

     - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Navigation logic may go here. Create and push another view controller. UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"SimpleNonTableViewController" bundle:nil]; // ... // Pass the selected object to the new view controller. [manualViewControllerParent.navigationController pushViewController:detailViewController animated:YES]; } 

Представление, с которым пользователь взаимодействует, подключено к SimpleTableViewController . Таким образом, SecondTableViewController является «внутри» SimpleTableViewController . Не стесняйтесь комментировать, если вы хотите получить более подробную информацию!


Я поставил свой тестовый / концептуальный проект на github. https://github.com/hyliandanny/TableViewCeption

Вам нужно использовать пользовательский контроллер контейнера, чтобы делать то, что вы хотите. Это было бы проще всего, если бы вы использовали раскадровку, но вы можете сделать это и в коде с xibs. Внешний контроллер должен быть UIViewController, а не контроллером табличного представления. Вы можете сделать что-то вроде этого (во внешнем контроллере):

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"SimpleNonTableViewController" bundle:nil]; [self addChildViewController:detailViewController]; detailViewController.view.frame = set the frame to what you want; [self.view addSubview:detailViewController.view]; [detailViewController didMoveToParentViewController:self]; } 

Вы должны прочитать документацию Apple для пользовательских контроллеров контейнеров.

Что вам нужно, чтобы убедиться:

  • Ваш делегат UITableView подключается к вашему контроллеру. В противном случае он не будет называть didSelectRow . Вы можете сделать это в xib или в методе viewDidLoad.
  • Ваш self.navigationController не ноль
  • Ваш detailViewController не равен нулю

Я также думаю, что вы имеете в виду, что у вас UITableView внутри вашего UIViewController . UITableView – это только представление, тогда как UITableViewController является контроллером. У вас не может быть контроллер внутри другого контроллера.

  • Компиляция приложения iOS для iOS
  • Как настроить GKMatchmakerViewController
  • Минимальная и максимальная высота UIView с автоматической компоновкой
  • Как показать точное количество кластеризованных маркеров на карте Google?
  • Как создать блок GCD с условным таймером для фонового потока в iOS?
  • Установить делегат суперкласса из подкласса setDelegate
  • Данные не могли быть прочитаны, потому что они не в правильном формате
  • Как получать контакты электронной почты с помощью GData
  • Разница между (null) и <null>
  • Игнорировать предупреждение типа CGFloat
  • Как открыть локально сохраненный PDF-файл в Objective C
  • Давайте будем гением компьютера.