изменить Subview суперпредставления через IBAction of Subview ios - PullRequest
0 голосов
/ 18 июля 2011

Я пытался найти решение здесь, но не смог, в основном у меня есть интерактивное подпредставление, которое мне нужно переключиться на новое интерактивное подпредставление изнутри подпредставления.Я могу легко изменить подпредставления с помощью IBAction в главном представлении, но мне не удалось изменить представление из подпредставления.Вот код ... который должен сделать то, что я пытаюсь сделать, более понятным.

в .h MainViewController

@interface MainViewController : UIViewController {
    IBOutlet OneViewController *oneviewController;
    IBOutlet TwoViewController *twoViewController;
}

-(IBAction)goToView;

@property (nonatomic, retain) IBOutlet OneViewController *oneviewController;
@property (nonatomic, retain) IBOutlet TwoViewController *twoViewController;

@end

в .m

@implementation MainViewController

@synthesize oneviewController;
@synthesize twoViewController;

-(IBAction)goToView {   
    [self.view addSubview:twoViewController.view];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view addSubview:oneviewController.view];  
}

Хорошо, все это прекрасно работает, я могу загрузить оба ViewController с XIB, и все их кнопки работают и т.д. ...
Но когда я пытаюсь ...

в .m OneViewController

#import "MainViewController"

...
[MainViewController.view addSubview:twoViewController.view];  ...

это не работает, я пробовал разные вещи, добавив twoViewController в .h oneViewController, но он потерпел крах ... Я все еще очень новичок во всем этом, так что, скорее всего, я скучаюочевидное.Спасибо за помощь !!

Я также пробовал это в .m OneViewController

, но он все еще не работал ... хотя сборка прошла успешно

MainViewController* mySuperView = (MainViewController*)self.view.superview; TwoViewController *twoViewController; [mySuperView.view addSubview:twoViewController.view];

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

следующий код работает, однако он дает мне 1 предупреждение ...

в моем подпредставлении OneViewController.m (под IBAction) ...

{for (UIView* next = [self.view superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];

        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            [(UIViewController*)nextResponder resetSubView];
        }`

в моем MainViewController.m

- (void) resetSubView { [self.view addSubview:twoViewController.view]; }

0 голосов
/ 18 июля 2011

Это действие выполняется не в том месте.Если вы пытаетесь добавить подпредставление к вашему MainViewController, вы должны действительно обработать это внутри MainViewController.m.Вы звоните:

[MainViewController.view addSubview: twoViewController.view];

, но MainViewController.view является статическим экземпляром представления.Если вы хотите оставить все как есть и предположить, что OneViewController уже является подпредставлением для MainViewController, вы должны сделать что-то вроде этого:

UIView * main = [OneViewController.view superview];[main addSubview: twoViewController.view];

Это довольно опасно, потому что у вас не гарантировано наличие суперпредставления для этого представления.Я бы просто обработал все это внутри MainViewController.Ни один контроллер не должен иметь возможности добавлять подпредставление к другому контроллеру, если у него нет экземпляра MainViewController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...