簡體   English   中英

從UIView導航到UIViewController

[英]Navigate to UIViewController from a UIView

我的應用程序標頭當前為全角,65pt高的UIView,然后將其用作所有頁面的通用標頭。

class AppHeader: UIView {
    ...
}

然后,在Main.storyboard中,我有一個UIViewController,帶有一個來自對象庫的View,其類指定為AppHeader

我的AppHeader(UIView)有多個按鈕,如果單擊這些按鈕,應該會將您從當前所在的頁面/控制器帶到另一個頁面。

從AppHeader類中,我無權使用本方法將另一個控制器顯示為不在范圍內。

這是我的AppHeader.xib:

在此處輸入圖片說明

我該如何解決?

這是非常糟糕的行為,您不應將UIView用作標題。 您應該將Navigation View Controller添加為應用程序的第一個視圖控制器。 導航視圖控制器具有導航欄,您可以在其中放置所需的按鈕。 從中,您將能夠推送或顯示其他視圖控制器。

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

使您的AppHeader視圖成為UIView的自定義子類(如果尚未創建)。 將按鈕上的操作連接到視圖中的IBAction方法。

創建一個協議AppHeaderDelegateProtocol 給您的AppHeader類一個弱的委托屬性。 定義該協議中的方法,這些方法可使AppHeader通知其擁有的視圖控制器有關按鈕按下的信息。

實現你AppHeaderDelegateProtocol在視圖控制器將包含的實例AppHeader

將委托屬性連接到AppHeader擁有的視圖控制器的每個實例。

那應該做。

您可以創建一個協議-將其稱為AppHeaderDelegate或其他名稱-並設置其他viewController來采用該協議。 您可以定義函數以使您的委托人知道按下了某個按鈕,並且委托人viewController可以通過顯示正確的視圖控制器來對此做出反應。

蘋果的協議文檔在這里

或者,您可以使用NotificationCenter廣播通知,以使訂閱者知道某個按鈕被按下,並使您的ViewController監聽這些通知並做出相應的反應。 但是,您必須管理類何時開始/停止偵聽,因為您可能有多個對象試圖對單個通知做出反應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM