簡體   English   中英

在沒有界面構建器的情況下,使用UIViewController和UIViews切換視圖的最佳方法是什么?

[英]What is the best way to switch views with UIViewController and UIViews without interface builder?

嘿伙計們我想過幾個解決方案,但不是很滿意他們所以需要一些想法。

我有:

  • 3 UIView實例view1,view2,view3
  • 1個UIViewController實例,UIViewController1,用於存儲view1,view2和view3

我想要:

  • 在view1中放置一個方法,告訴UIViewController1切換到view2。

我是否需要在view1中傳遞對UIViewController1的引用? 這是唯一正確的方法嗎?

首先,這些是全屏視圖嗎? 如果是這樣,您應該考慮使用3個視圖控制器,每個視圖一個,並且可能將它們安裝在UITabBarController中,這與您描述的行為類似。 但無論如何:

不,視圖不應該告訴控制器做任何事情。

在MVC架構中,視圖呈現信息並接收(某些)用戶交互。 控制器有責任決定如何處理該操作。

視圖的作用是告訴控制器發生了交互。

所以主要的問題是 - 什么事件會產生這種行為?

是按鈕嗎? 按鈕(UIControl的子類)使用目標操作模式來處理此通信。 您的視圖應提供對按鈕的引用:

@property (nonatomic, retain) UIButton *switcherButton;

接下來,在視圖控制器中,您將實現一個方法:

-(void)viewSwitcherButtonTapped:(id)sender;

這是您的視圖可以告訴控制器發生UI事件的方式。 這就是應該做的一切。 控制器可以根據模型中的狀態信息來決定,也可以根據自己的內部狀態或邏輯來決定點擊該按鈕時應該發生什么。

最后,在創建視圖之后,控制器會將自己掛鈎到按鈕:

[view.switcherButton addTarget:self action:@selector(viewSwitcherButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

這樣任何視圖控制器都可以使用此視圖,視圖不依賴於對控制器的引用(因為它不應該)。

但是按鈕只是一個示例,如果生成行為的事件不同,您的實現可能會有所不同。 回答這個問題,也許我可以修改這個答案來申請。

你應該看看

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns中的 “模型 - 視圖 - 控制器設計模式”,“目標 - 動作機制”和“授權” 。 HTML

你有2個選擇:

快速而又臟的:只需在每個視圖中聲明一個指向UIViewController的屬性,將其定義為assign以避免循環引用(我假設你保留了viewcontroller中的視圖)。 然后你可以通過這個屬性調用uiviewcontroller上的方法

好的:讓每個視圖廣播一個通知,uiviewcontroller注冊這個通知,並在其回調中做它需要做的事情。

暫無
暫無

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

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