-2

我有一个应用程序,您可以在其中从两个控制器转到一个视图,我想知道是否可以检查它来自哪个控制器,以便我可以根据它来自的控制器做不同的事情。

提前致谢

4

3 回答 3

1

假设您推送新视图,您可以访问 UINavigation 堆栈以查看哪个视图在前一个视图之前。

Class aClass = [[[self.navigationController viewControllers] objectAtIndex:self.navigationController.viewControllers.count - 2] class];

if (aClass == [UIViewControllerA class])
    //Do something
else if (aClass == [UIVIewControllerB class])
    //Do something else

或者为您推送到的单个视图创建一个自定义 init 方法,该方法允许您传入一个变量,说明它来自哪个视图(对不起,真的很罗嗦)。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil isFromViewA:(bool)isFromViewA
于 2013-08-22T17:57:44.580 回答
0

我可能必须编写一个自定义初始化方法并在初始化期间传递一些东西。

会有不同的做法。这是方法之一

在 yourView.h

-(id)initWithType:(int)viewControllerType;

还创建一个 int 变量假设 int viewType; 在 yourView.h

在 yourView.m 文件中

        -(id)initWithType:(int)viewControllerType{
        self = [super initWithFrame:CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>)];
        if (self) {
            //custom init here
            viewType = viewControllerType;

    }

您可以将第一个 viewController 定义为 1,将第二个定义为 2。

所以在第一个viewController中初始化yourView时。代码应该类似于

yourView *newView = [yourView alloc] initWithType:1];

所以在第二个 viewController 中初始化 yourView 时。代码应该类似于

yourView *newView = [yourView alloc] initWithType:2];

现在,事情会变得更容易

if(viewType==1){
//do something particular for first view controller 
}
if(viewType==2){
//do something particular for second view controller 
}

如果它不起作用。请分享你的代码...谢谢

于 2013-08-22T17:56:29.950 回答
-2

I worked it out myself. I made an nsobject and then when I left the controller I add that to the array of if it exists update it then in the next controller if the value of the element in the object is equal to the name of the controller that it came from then it does extra things

于 2013-08-22T18:48:00.727 回答