переключение iphone с одного UIViewController на другой

#ios #objective-c #iphone #cocoa #cocoa-touch

#iOS #objective-c #iPhone #cocoa #cocoa-touch

Вопрос:

У меня есть один главный контроллер просмотра с именем GuideViewController и другой контроллер просмотра с именем RestauranterViewController. В GuideViewController у меня есть иерархия UIView, где guideParentView находится под MainView. Теперь я хочу переключиться на другой контроллер просмотра с именем RestauranterViewController, и здесь я загружаю RestauranterViewController.xib поверх GuideViewController.xib, где находится MainView, но я делаю guideParentView скрытым. Теперь я хочу переключиться с RestauranterViewController на GuideViewController. Но я не могу. Кто-нибудь, пожалуйста, может мне помочь?

 @class RestauranterViewController;
@interface GuideViewController : UIViewController {
    IBOutlet UIView *mainView;
    IBOutlet UIView *guideParentView;
}
@property(nonatomic,readonly,retain) IBOutlet UIView *mainView;
@property(readwrite,assign) IBOutlet UIView *guideParentView;
  

Теперь, когда я нажимаю на кнопку переключения, вызывается метод, подобный приведенному ниже

 #import "GuideViewController.h"
#import "RestauranterViewController.h"
@implementation GuideViewController

-(IBAction)select:(id)sender{
    guideParentView.hidden = YES;
    RestauranterView = [[RestauranterViewController alloc] initWithNibName:@"RestauranterViewController" bundle:[NSBundle mainBundle]];
    RestauranterView.view.frame = CGRectMake(0, 100, 299, 220);

    [mainView addSubview: RestauranterView.view];
}
  

И в RestauranterView, когда я нажимаю на кнопку, чтобы сделать скрытый вид видимым, но это не удается.

 @interface RestauranterViewController : UIViewController {
    GuideViewController *GuideView;
}


#import "RestauranterViewController.h"
#import "GuideViewController.h"
@implementation RestauranterViewController

-(IBAction)back:(id)sender{
    GuideView = [[GuideViewController alloc] init];
    GuideView.guideParentView.hidden = NO;
    [self.view removeFromSuperview];
}
  

Похоже, что он не может вызвать родительский метод. Пожалуйста, помогите мне…

Ответ №1:

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

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

Комментарии:

1. Спасибо, но мне не нужен никакой UINavigationController. Я решил с помощью viewWithTag.

Ответ №2:

Наконец я решил это следующим кодом, я могу использовать либо objectAtIndex, либо viewWithTag

 -(IBAction)back:(id)sender{
    superView = (UIView *)self.view.superview;
    //UIView *perentView = [[topView subviews] objectAtIndex:6];//Its the Object Index in the XIB file
    UIView *parentView = (UIView *)[superView viewWithTag:177];//I have put a Tag of 177 in the tag field in the XIB.
    parentView.hidden = NO;
    [self.view removeFromSuperview];
}