从UIView导航到UIViewController

时间:2017-02-15 18:40:35

标签: ios swift uiview

我的应用标题目前是一个全宽,65pt高度的UIView,然后我将其用作所有页面的通用标题。

class AppHeader: UIView {
    ...
}

然后,在我的 Main.storyboard 中,我有一个UIViewController,它带有一个来自对象库的View,它的类被指定为 AppHeader

我的AppHeader(UIView)有多个按钮,如果点击这些按钮,则会将您带到目前正在访问另一个的页面/控制器上。

从AppHeader类我无权使用本方法来显示另一个控制器,因为它不在范围内。

这是我的AppHeader.xib:

enter image description here

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

这是非常不好的行为,你不应该使用UIView作为标题。您应该添加导航视图控制器作为应用程序的第一个视图控制器。导航视图控制器具有导航栏,您可以在其中放置所需的按钮。从那些,您将能够推送或呈现其他视图控制器。

查看官方文档:https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html

答案 1 :(得分:1)

如果AppHeader已经定位,请UIView查看IBAction的自定义子类。将按钮上的操作连接到视图中的AppHeaderDelegateProtocol方法。

创建协议AppHeader。为您的AppHeader类提供弱委托属性。在该协议中定义方法,让AppHeaderDelegateProtocol通知它拥有关于按下按钮的视图控制器。

在包含AppHeader实例的视图控制器中实施AppHeader

将delegate属性连接到<?php use Illuminate\Database\Eloquent\Model; class ReminderModel extends Model { protected $table = 'user_reminders'; public $primaryKey = 'id'; } 拥有的视图控制器的每个实例。

应该这样做。

答案 2 :(得分:0)

您可以创建协议 - 将其称为AppHeaderDelegate或其他东西 - 并设置其他viewControllers以采用该协议。您可以定义函数以让您的代理知道按下了某个按钮,并且您的委托viewController可以通过呈现正确的视图控制器来对此做出反应。

Apple的协议文档here

或者,您可以使用NotificationCenter广播通知,让订阅者知道按下了某个按钮,并让您的viewControllers监听这些通知并相应地对它们做出反应。但是,您必须管理类何时开始/停止侦听,因为您可能有几个对象试图对单个通知做出反应。