#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];
}