从Controller返回到前一个

时间:2012-02-20 14:30:12

标签: objective-c xcode uiviewcontroller push storyboard

我正在尝试从我的UIViewController切换回我的UITableViewController但是显然它不能按照我想要的方式工作。 我从一开始就用故事板创建了我的界面,所以我并没有真正通过代码从一个View移动到另一个View。到目前为止,我只是通过故事板轻松实现了每个sergues的观点。但是,当我尝试回到之前的视图时,将实现一个新的ViewController,因此我存储在旧视图中的所有数据都“丢失”。

实际上我没有代码可以呈现给你(因为有警告),但情况是:

- >我在我的UITableView中有一个MutableArray存储内容。

- >用户点击扫描按钮,扫描应在我的阵列中导入的新项目。

- >当试图回到我的tableView时,有一个新的控制器让我感到困惑,不知道我存储在旧表中的数据。

那么我该如何简单地回到我的旧控制器,以防止一直创建一个新的控制器?

sergue-push是否总是创建一个新的控制器?

(问题可能很简单,但我对这些东西不熟悉。尝试了搜索功能提供的一些结果,但没有一个工作:()

/ edit:Popback问题已经解决但阵列填充问题仍然存在。代码:

GeneralSettings *sharedGS = [GeneralSettings sharedInstance];
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString];
[sharedGS.listArray insertObject:strCheckString atIndex:0];
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN);

sharedGS.strEAN中的数据(“83274572354”即) listArray(null)中的数据

2 个答案:

答案 0 :(得分:20)

你不要回头。这将创建前一个控制器类的新实例。你回来了。你可以完成这两种方式。

1:当您想要返回(弹出)平板电脑视图控制器时,在以下语句中放入代码。

[self.navigationController popViewControllerAnimated:YES];

2:如果你想在故事板中这样做,你需要实现以下自定义segue类:

实施

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
[src.navigationController popViewControllerAnimated:YES];
}

和标题

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end

将此方法放在UIViewController中,将属性设置回UITableViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"goBackToTableView"])  {
    [[segue destinationViewController] set{whatEverProperyYouWantTo}: {valueOfPropertyToSet}];
    }
}

答案 1 :(得分:3)

@ T.J 采用这种方法时 “2:如果你想在故事板中这样做,你需要实现以下自定义segue类:

执行“

并根据以下the document, “触发Segue时配置目标控制器 当触发segue时,iOS会执行以下任务:

它实例化目标视图控制器。 它实例化一个新的segue对象,该对象包含被触发的segue的所有信息。 注意:popover segue还提供了一个属性,用于标识用于控制目标视图控制器的弹出控制器。 它调用源视图控制器的prepareForSegue:sender:方法,传入新的segue对象和触发segue的对象。 它调用segue的perform方法将目标控制器带到屏幕上。实际行为取决于正在执行的segue的类型。例如,模态segue告诉源视图控制器呈现目标视图控制器。 它释放segue对象,segue完成。“

它再一次实例化呈现viewController,然后在调用“perform”的覆盖方法后dealloc。因此,最好根据the document选择您提交的第一种方法或委托方法。

谢谢