【问题标题】:How to go back to previous view controller?如何回到以前的视图控制器?
【发布时间】:2015-02-22 14:39:12
【问题描述】:

我有一个 UIViewController A 和 UIViewController B 的 push segue,在某些情况下我需要重复这个,例如:

ViewController A -> ViewController B -> ViewController A -> ViewController B

我还需要从ViewController B -> ViewController A传递数据

我不想创建 4 个 ViewController,那么在这种情况下如何回收代码?

【问题讨论】:

    标签: ios objective-c iphone uiviewcontroller segue


    【解决方案1】:

    您只需推送和弹出相同的视图控制器。

    如果您希望 B 与 A 通信,则在 A 上设置一个与 B 通信的协议。(或曾经实现该协议的人)

    B码

    @protocol MyProtocol <NSObject>
    -(void)callFromB:(id)data;
    @end
    @property (weak) id <MyProtocol> delegate;
    

    实现:

    if ([self.delegate respondsToSelector:@selector(callFromB:)]){
            [self.delegate callFromB:data];
        }
    

    代码

    B.delegate = self;
    -(void)callFromB:(id)data {
    ...
    }
    

    【讨论】:

      【解决方案2】:

      您不应该回收它们。我的意思是你不应该回收那些视图控制器的具体实例。 当然,她可能有一些技术实现允许这样做,但它(与表格视图单元格相反)不是必需的。

      您正试图过早地进行优化。只需根据需要创建新的视图控制器实例。任何支持 iOS6 及更高版本的 iPhone 都可以毫无问题地处理这个问题。

      传递数据可以通过方便的方法来完成,例如

      -(void)configureWithData:(WhateverDataType *)paramData
      

      在为 segue 做准备时,您将获得对目标视图控制器的引用并像这样传递数据:

      -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
      {
          CustomViewController *nextViewController = [segue destinationViewController];
          [nextViewController configureWithData:someData];
      }
      

      【讨论】:

      • 我明白了,但在什么情况下我必须优化?因为在我的情况下,我将有 2 个相同的代码。
      • 你拥有的是一个类的两个实例。您的言语中没有“两个代码”,您只有“一个”。拥有一个类的多个实例是面向对象编程的基础,并且是预期和可取的。我建议阅读 OOP 基础知识,以正确理解什么是类、对象、对象图、实例。尽管已尽最大努力构建正确架构的应用程序,但只有在遇到内存/性能问题时才开始优化。跨度>
      • 我现在明白了,我是瞎子。非常感谢您的建议
      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 2014-12-08
      • 2016-05-23
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多