我的应用标题目前是一个全宽,65pt高度的UIView,然后我将其用作所有页面的通用标题。
class AppHeader: UIView {
...
}
然后,在我的 Main.storyboard 中,我有一个UIViewController,它带有一个来自对象库的View,它的类被指定为 AppHeader 。
我的AppHeader(UIView)有多个按钮,如果点击这些按钮,则会将您带到目前正在访问另一个的页面/控制器上。
从AppHeader类我无权使用本方法来显示另一个控制器,因为它不在范围内。
这是我的AppHeader.xib:
我该如何解决这个问题?
答案 0 :(得分:1)
这是非常不好的行为,你不应该使用UIView作为标题。您应该添加导航视图控制器作为应用程序的第一个视图控制器。导航视图控制器具有导航栏,您可以在其中放置所需的按钮。从那些,您将能够推送或呈现其他视图控制器。
答案 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监听这些通知并相应地对它们做出反应。但是,您必须管理类何时开始/停止侦听,因为您可能有几个对象试图对单个通知做出反应。