#iphone #objective-c #cocoa-touch
#iPhone #objective-c #cocoa-touch
Вопрос:
У меня есть UIViewController, который показывает разные подклассы UIViewController. В главном UIViewController.m у меня есть подкласс под названием ‘Home’, загружаемый при запуске приложения.
Теперь, когда загрузился домашний просмотр, у меня есть кнопка, которую я хочу использовать для переключения на другой просмотр под названием ‘PreGameInfo’. Я пытаюсь использовать приведенный ниже код:
- (IBAction)showPreGameInfo:(id)sender {
[self.view insertSubview:preGameInfo.view atIndex:0];
}
Это не работает, и я знаю, это потому, что ‘self.view’ должен ссылаться на основной UIViewController, а не на self ‘Home’ view. Кто-нибудь знает, как вставить SUBVIEW в основной UIViewController при использовании UIButton во вложенном представлении???
Спасибо!
Комментарии:
1. Это очень сбивает с толку… Если вы будете следовать схеме именования, все будет намного лучше! Является ли ваш корневой контроллер просмотра классом с именем
MainViewController
? ЯвляетсяHome
UIView или UIViewController (вы должны назвать егоHomeView
или HomeViewController` соответственно). Аналогично, лучше назвать PreGameInfoPreGameInfoViewController
.2. Теперь вернемся к вашему вопросу. Я предполагаю, что вы не используете UINavigationController. Вы инициализировали свой
PreGameInfoViewController
, прежде чем пытаться добавить его представление?
Ответ №1:
Вы можете использовать delagate. Это очень просто
Итак, реализуйте это в своем контроллере представления информации;
В InformationViewController.h
@protocol InformationViewControllerDelegate;
@interface InformationViewController : UIViewController {
id <InformationViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id <InformationViewControllerDelegate> delegate;
- (IBAction)returnBack:(id)sender;
@end
@protocol InformationViewControllerDelegate
- (void)InformationViewControllerDidFinish:(InformationViewController *)controller;
@end
в InformationViewController.m
- (IBAction)returnBack:(id)sender {
[self.delegate InformationViewControllerDidFinish:self];
}
И используйте делегат в любом контроллере просмотра, который вам нужен, вот так :
В HomeViewController.h
#import "InformationViewController.h"
@interface HomeViewController : UIViewController <InformationViewControllerDelegate> {
}
Напишите метод, чтобы изменить представление с домашнего на информационное
- (IBAction)goToInformationView:(id)sender;
В HomeViewController.m
- (IBAction)goToInformationView:(id)sender {
InformationViewController *controller = [[InformationViewController alloc] initWithNibName:nil bundle:nil];
controller.delegate = self;
// You can chose the transition you want here (they are 4 see UIModalTransitionStyle)
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
[controller release];
}
И последний, но не менее важный метод делегирования, он информирует HomeViewController о завершении InformationViewController
- (void)InformationViewControllerDidFinish:(InformationViewController *)controller {
[self dismissModalViewControllerAnimated:YES];
}
Я надеюсь, что это помогает
Ответ №2:
- (IBAction)showPreGameInfo:(id)sender {
[superview insertSubview:preGameInfo.view atIndex:0];
}
Ответ №3:
Работает ли этот код?
[self.parentViewController.view addSubview:myView];
Комментарии:
1. Это во многом зависит от контекста, в котором вы находитесь
2. @buzzkip Сколько у вас ViewControllers? Потому что вы можете получить доступ к self.parentViewController.parentViewController.view
Ответ №4:
Просто сделайте это в modalView:
[self presentModalViewController:preGameInfo animated:YES]
или вы можете сделать что-то вроде этого…
Эта строка добавит ваш новый вид в представление Windows rootViewControllers
[self.view.window.rootViewController.view addSubview:preGameInfo.view];