Контроллер Push View, черный экран
Я подталкиваю к новому контроллеру представления и передаю ему некоторые данные. Когда я запускаю приложение, я могу нажать кнопку и нажать на новое представление, но экран полностью черный. Любая помощь приветствуется.
- (IBAction)button:(id)sender {
NSString *firstField = self.field.text;
NSString *secondField = self.field2.text;
self.resultsArray = [[NSArray alloc] initWithObjects:firstField, secondField, nil];
NSUInteger randomResult = arc4random_uniform(self.resultsArray.count);
self.label.text = [self.resultsArray objectAtIndex:randomResult];
ImagesViewController *ivc = [[ImagesViewController alloc] init];
ivc.label = self.label.text;
[self.navigationController pushViewController:ivc animated:YES];
}
Ответы
Ответ 1
Когда вы используете раскадровку и хотите нажать контроллер представления в коде (а не на segue), вам нужно дать контроллеру идентификатор и создать его следующим образом:
ImagesViewController *ivc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyIdentifier"];
ivc.label = self.label.text;
[self.navigationController pushViewController:ivc animated:YES];
Ответ 2
Контроллер представления, на который вы нажимаете, не имеет установленного размера кадра. Всегда рекомендуется вызывать назначенный init для объектов. Для контроллеров представлений назначенный метод init
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
если у вас есть xib, назначьте его как
ImagesViewController *ivc = [[ImagesViewController alloc] initWithNibName:<your xib> bundle:[NSBundle mainbundle];
если вы используете пользовательский вид, назначьте размер кадра и добавьте его как subview
Ответ 3
Xcode 7.3 и Swift 2.2
В моем случае я внес изменения в раскадровку и сделал ее TabBarController и соответственно изменил класс контроллера с UIViewController на UITabBarController. После некоторой настройки это изменение не было благоприятным, и я сделал все изменения и получил черный экран, потому что я забыл изменить класс контроллера. Я изменил его обратно на UIViewController, и он снова начал работать.
Итак, проверьте, не сделали ли вы такую же ошибку. Черный экран появился потому, что у раскадровки был класс (UIView/UITabBar/UITableView Controller), но это не то же самое в коде.
Ответ 4
Это также может произойти, если вы каким-то образом получили неправильное соединение между одним из подзонов в раскадровке и представлением контроллера. Проверьте, что реферирующие выводы правильны в каждом из ваших представлений.
Ответ 5
У меня хороший:
Убедитесь, что вы используете правильный класс Super, делегат и т.д. в верхней части viewController, которую вы пытаетесь представить. то есть.
Я вообще не использовал/не выполнял UINavigationController
class TMDetailBlogViewController: UINavigationController {
//code goes here
}
После
class TMDetailBlogViewController: UIViewController {
//code goes here
}
Ответ 6
Обычно вы переходите к другому контроллеру представления, вызывая:
initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
на вашем пользовательском UIViewController.
Если вы не используете xib файл, то то, что вы делаете, может быть прекрасным. Вы динамически создаете элементы пользовательского интерфейса внутри конструктора вашего ImageViewController?