iPhone:从它推动的位置推动UIViewController

时间:2013-01-24 07:54:40

标签: iphone uiviewcontroller pushviewcontroller

我有两个UIViewControllersViewController_AViewController_B

我的流程是 A ViewController_A ---> B ViewController_B ---> C ViewController_A

对于A,B和C导航,我有以下情况,

A - 在ViewController_A我有UITableViewCell中的100条记录,用户选择任何一条记录,它将推送到ViewController_B显示来自ViewController_A的所选记录。

B - 将显示ViewController_A中的选定数据,并返回“返回”按钮(我可以弹出)。另一件事,有一个UIButton,如果用户点按此按钮,它会再次显示ViewController_A,但只显示该记录

C - 我们会从ViewController_B弹出,然后没有问题,但我又想推,所以我需要#import ViewController_A ViewController_B(因为我已在ViewController_B中导入了ViewController_A,因此我无法在ViewController_A重新导入ViewController_B,对吧?)会为UIViewControllers创建碰撞{ {1}}。

C 中解决问题的更好方法是什么,一个建议是让另一个`ViewController_DViewController_A那样显示,但我认为它不正确的方法,因为我已经UIcoded了解功能。

需要建议。如果您有任何疑问,请告诉我!

2 个答案:

答案 0 :(得分:2)

我明白你用#import指令有问题吗? 我猜你要在.h文件中导入标题?如果是这样,请在.m文件中执行#import;在.h中你应该使用@class YouViewControllerA。

Ex with AViewController:

<强>·H

@class BViewController

@interface AViewController : UIViewController 
{
  //Your attributes here
}

@end

.m

#import "BViewController.h"

@implementation AViewController

//Some AViewController methods here

@end

为AViewController和BViewController执行此操作,它应该可以工作。

编辑: #import指令旨在避免递归错误,因此无论如何都不应该出错。 如果您知道一些预处理,#import会执行以下操作(自动):

#ifndef TOTO_HEADER
#define TOTO_HEADER

//your methods here

#endif

更多解释

当您编写#import“toto.h”时,编译器将在编译时执行以下检查:

  • 是否定义了预处理变量“TOTO_HEADER”? (这对应于行ifndef“TOTO_HEADER”)
  • 如果不是我们定义它(这是#define“TOTO_HEADER”行)并且我们“包含”方法和功能。
  • 如果已经定义,则不需要包含方法(因为它们已经包含在内)。

这样我们就可以阻止头文件被包含在内。 (并且通过扩展它不应该产生任何递归错误。)

换句话说:#import确保头文件只包含一次,这样你就不会遇到递归包含的问题。

答案 1 :(得分:0)

一个解决方案可能就是这个 -

首先在NSUserDefaults中保存所选值,然后在viewController B中单击UIButton时取一个bool。 然后将segue推送到ViewController A并检查Bool的值。 如果是真的那么只打印NSUserDefaults的值,否则打印整套100条记录。