ios - 以编程方式使用 Storyboard推送 View Controller 的替代方法

标签 ios views push storyboard

我正在寻找其他方法来以编程方式推送在 Storyboard上实例化的 View Controller 。 实际上,我找到了两种方法,既可以转到下一个 View ,也可以返回到上一个 View :

  1. 使用pushViewController:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
    LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"];
    [self.navigationController pushViewController:lvc animated:YES];
    
  2. 以编程方式执行Segue:

    [self performSegueWithIdentifier: @"SongSegue" sender: self];
    

您是否有一些关于备选方案和执行此操作的最佳方式的提示?请注意,我指的不是模态视图。

最佳答案

Apple 建议使用 performSegueWithIdentifier:sender:someObject 以编程方式执行转场。这样做至少有几个优点:

  • 您自己的代码更少意味着您让框架完成更多工作。如果 Apple 为推送转场提出了一些超酷的新视觉效果,或者改进了性能,或者修复了 future 某个 iOS 版本中的错误,您的应用程序可以免费获得。您编写的每一行代码都是为了完成框架可能为您完成的工作,这会增加编写错误的机会。

  • 更多 IB 意味着更容易改变。如果您决定要将所有推送转场更改为模态转场,或者您可以在其中制作自己的超酷视觉效果的某些自定义转场类型,您可以在 IB 中全部选择它们,然后单击一下即可更改转场类型,而不是寻找在你的代码中。


此外,无论您使用第一种还是第二种方法,推送 View Controller 以“返回”到之前的 View Controller 都不会按照用户期望的方式工作。当您推送 SongViewController 时,它会添加到导航堆栈的末尾:

LocationViewController -> SongViewController

如果您随后再次按下 LocationViewController 以“返回”:

LocationViewController -> SongViewController -> LocationViewController

如果用户点击导航栏中的后退按钮,他们将从位置 View 返回到歌曲 View ,再返回到位置 View 。 (此外,如果你继续这样做,每一次“后退”和“前进”都会增加一个不断增加的 View Controller 链,这可能会导致其他问题。)

相反,您应该让导航 Controller 处理返回。为此,它在导航栏中放置了一个按钮,可以处理大多数用例。如果您需要让自己的控件返回,您不能在 iOS 5 的 IB 中执行此操作,但您可以使用导航 Controller 的 popViewControllerAnimated: 方法以编程方式执行此操作。

关于ios - 以编程方式使用 Storyboard推送 View Controller 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047146/

相关文章:

ios - Objective-C 会序列化/恢复具有多个引用的对象会创建重复的对象吗?

IOS有后台服务提供类似android aidl服务的功能吗?

Mysql SQL for "replace everything but this"where xxx

asp.net-mvc - 在 View 中使用 "ObjectName"而不是 "Namespace.ObjectName"

Git - 如何推送文件夹内的每个存储库

ios - 如何在ios中选择多选图像

ios - 淡化 UILabel 的背景颜色? (静态展示)

SQL连接两个 View

git push 不更新远程服务器上的文件

git - Jenkins git推送多个分支