同一个视图控制器中的两个 UINavigationController

Posted

技术标签:

【中文标题】同一个视图控制器中的两个 UINavigationController【英文标题】:two UINavigationControllers in same viewcontroller 【发布时间】:2012-03-27 05:52:27 【问题描述】:

我在使用 iPad 上的 UINavigationalControllers 时遇到了一些问题。

问题:

UINavigationController1 UINavigationController2

放置在UIViewController

当事件发生在UINavigationController1....时应该在UINavigationController2采取行动

类似这样.....当点击发生在UINavigationController1中的UITableViewCell时,视图之间的转换应该在UINavigationController2中完成

需要一些建议如何处理这个......

提前致谢

【问题讨论】:

您也可以使用委托。为视图控制器创建自定义委托并处理操作。希望对您有所帮助。 【参考方案1】:

您应该使用委托来执行此操作

在 @implementation 上方的 ViewController1 的 .h 中添加这个

@protocol ViewController1Delegate;

然后在@end下面

@protocol ViewController1Delegate <NSObject>

- (void)viewController1:(id)controller didDoAction;

@end

然后在控制器中声明一个 ViewController1Delegate 类型的属性

@property (nonatomic, assign) id <ViewController1Delegate> delegate;

然后将此添加到 ViewController1 的 .m 中

@synthesize delegate;

在动作上调用委托方法

if ([self.delegate respondsToSelector:@selector(viewController1:didDoAction)]) 
    [self.delegate performSelector:@selector(viewController1:didDoAction) withObject:self];

现在在 ViewController2 .h 导入 ViewController1.h

#import ViewController1.h

现在在 ViewController2 .h 上像这样监听委托

@interface ViewController2 : UIViewController <ViewController1Delegate>

然后在.m中实现方法

- (void)viewController1:controller didDoAction

  //implement

当视图控制器被实例化时,需要像这样将 viewController1 的委托设置为 viewController2

viewController1 = [ViewController1 new];
viewController2 = [ViewController2 new];
viewController1.delegate = viewController2

【讨论】:

以上是关于同一个视图控制器中的两个 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

设置 UINavigation 控制器和各种视图加载

UINavigation 将同一视图控制器推送两次错误

如何仅为一个视图控制器设置 UINavigation 栏的 titletextattributes?

UINavigation 控制器 UIViewController 和 UItoolbar 作为子视图问题

关闭模态 UINavigation 控制器

情节提要:更改情节提要中指定的 UINavigation 控制器的根视图