我点击了一个按钮,打开另一个 viewController (familyView)
。
在familyView
中还有另一个按钮,它会让我回到 mainViewController(ViewController.xib)
,但我不知道如何调用主viewController。
我的方法是致电familyView
UIViewController* familyView = [[UIViewController alloc] initWithNibName:@"familyView" bundle:[NSBundle mainBundle]];
[self.view addSubview:familyView.view];
我希望你能帮忙打电话给主ViewController
?我必须使用相同的方法来调用它吗?像这样我的意思是:
UIViewController* mainView = [[UIViewController alloc] initWithNibName:@"viewController" bundle:[NSBundle mainBundle]];
[self.view addSubview:mainView.view];
如果是,是否有更好的方法来实现这一点?在我的演示项目中,我正在尝试使用数据和一个按钮来回显示7个视图。
编辑: 如果我使用UIView那对我来说最好,而不是使用不同的viewControllers与他们的实现和接口文件? 我的项目将有视图,每个视图都有从不同的html页面解析的数据。
答案 0 :(得分:1)
有两种方法可以使用。
从你的问题看来,UINavigationController似乎是最好的选择,但我会告诉你们两者。
<强>的UINavigationController 强>
当您从应用程序委托加载mainViewController时,需要将其包装在导航控制器中,如下所示:
AppDelegate.h
@property (strong, nonatomic) UINavigationController *navController;
AppDelegate.m
@synthesize navController = _navController;
//在didFinishLaunchingWithOptions中:
UIViewController *mainViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
navController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = nav1;
[self.window makeKeyAndVisible];
现在,在你的MainViewController中,你有了UINavigationController的说服力。
如果您想从父母那里推送孩子,您可以这样做:
ChildViewController *child = [[ChildViewController alloc]...];
[self.navigationController pushViewController:child animated:YES];
如果您在ChildViewController中并希望返回,只需执行:
[self.navigationController popViewControllerAnimated:YES];
这是“向下钻取”技术。
(我知道“向下钻取”具有更多意义,但它提供了一个很好的参考框架。)
<强>代表强>
现在,您拥有的另一种方法是在类之间设置委托。因此,如果你在childView中并且需要打电话给你的父母,你将有一个渠道这样做。
在MainViewController.h中设置如下:
#import <UIKit/UIKit.h>
//This is our delegate
@protocol TalkToParentDelegate <NSObject>
//This is our delegate method
- (void)helloParent;
@end
@interface MainViewController : UIViewController <TalkToParentDelegate>
...
..
@end
在MainViewController.m中,确保添加委托方法。
- (void)helloParent {
NSLog(@"Hello child, let me do something here");
}
在你的ChildViewController.h设置中它是这样的:
#import <UIKit/UIKit.h>
//Add header of class where protocol was defined
#import "MainViewController.h"
@interface ChildViewController : UIViewController
//Create a property we can set to reference back to our parent
@property (strong, nonatomic) id <TalkToParentDelegate> delegate;
@end
现在,在MainViewController.m中,无论何时出现ChildViewController,都要这样做:
ChildViewController *child = [[ChildViewController alloc]...];
//Set the delegate reference to parent
child.delegate = self;
//present the view
最后但并非最不重要的是,当您在您的孩子中时,您可以在父母(MainViewController)上调用方法,如下所示:
[self.delegate helloParent];
所以这里有两种方法可以使用。
但是我想注意一下,你可以一起使用它们。假设你有一个UINavigationController,但仍然需要一个孩子与其父母交谈,你可以设置一个代表,这是可能的。