-1

我有一个按钮,单击时会打开另一个viewController(familyView)。还有familyView另一个按钮可以让我回到mainViewController(ViewController.xib)但我不知道如何调用主视图控制器。

我的调用方法familyView

UIViewController* familyView = [[UIViewController alloc] initWithNibName:@"familyView" bundle:[NSBundle mainBundle]];
[self.view addSubview:familyView.view];

我希望你能帮助如何调用 main ViewController?我必须使用相同的方法来调用它吗?像这样我的意思是:

UIViewController* mainView = [[UIViewController alloc] initWithNibName:@"viewController" bundle:[NSBundle mainBundle]];
[self.view addSubview:mainView.view];

如果是,是否有更好的方法来实现这一点?在我的演示项目中,我试图让 7 个视图充满数据和一个按钮来回。

编辑:如果我使用 UIView 对我来说最好,而不是使用不同的 viewControllers 和它们的实现和接口文件?我的项目将有视图,每个视图都有从不同的 html 页面解析的数据。

4

1 回答 1

1

有两种方法可以使用。

  1. UINavigationController
  2. 代表们

从您的问题来看, 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];

这就是“向下钻取”技术。

(我知道“Drill Down”的意义远不止于此,但它提供了一个很好的参考框架。)


代表

现在,您拥有的另一种方法是在类之间设置委托。因此,如果您在 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 但仍然需要一个孩子与它的父母交谈,您可以设置一个委托,这样就可以了。

  • 希望这可以帮助。
于 2012-08-07T20:02:31.267 回答