2013-05-15 237 views
0

所以我在看一個iPad的Objective-C Xcode項目的源代碼,我對此很陌生,無法弄清楚發生了什麼事情。Xcode iPad故事板

所以我在看MainStoryboard_ipad.storyboard文件,它顯示了所有各種按鈕和事物,因爲它們看起來會顯示在實際的iPad屏幕上。

如何將這些圖形按鈕中的每一個與某個方法「聯繫起來」,並且該方法在單擊該特定按鈕時會執行某些操作?在程序_ .h/m中還有兩個其他文件,它們似乎包含與按鈕相關的方法,但我沒有看到具體的方法。

任何人都可以在這裏解釋過程或向我展示一個鏈接(非常清晰易懂)指南嗎?

+0

這需要一點解釋,所以最好的做法可能是觀看Youtube上的iOS/XCode或Pluralsight等地方的視頻教程:http://pluralsight.com/training –

+0

通常,右鍵單擊你的插座(按鈕等)在故事板,並將其拖動到.h文件 – Stas

回答

1

是的,這是我在教程中花費數小時之前的一個關鍵問題。我不認爲這是有經驗的程序員,只是潛入應用程序開發的文檔。

通常的方法是,在相關視圖控制器類(分別爲A UIViewController子類或分別爲UITableViewController)的.h文件中聲明對象類型的屬性(即。UIButton)。向其添加關鍵字IBOutlet是關鍵。

該關鍵字使Interface Builder(IB;現在是故事板編輯器)能夠識別那些應該鏈接到在IB中創建和維護的UI項目的屬性。通過拖動從連接檢查員的線(在IB視圖右側窗格,窗格的選項卡欄上最右邊的圖標,所述一個與所述圓中的箭頭),以實際的對象或者在預覽(鏈接此基準出口中心窗格)還是在視圖層次結構視圖中。

在.h文件中(如果在該文件中進行綜合,則在.m文件中),您的連接由聲明左側的圓點確認。當屬性沒有連接時,它是一個空圈。當物業未被標記爲IBOutlet時,根本沒有圈。

現在,當您從內部(或沒有 - 可能但不推薦)訪問屬性時,視圖控制器應該與大多數方法(viewDidLoad和follwonig方法)中的nil不同。您可以獲取或設置值,並通過設置它們,您將實際更改屏幕上相關的UI項目。

許多UI項目是控件(UIControl的子類,例如UIButton)並且分配了操作。通過調用一個動作,控制器將消息發送給它的控制器,用戶做了一些有趣的事情。用戶可能已經更改了UISwitch的值或按下了UIButton。 這與屬性非常相似。聲明一個方法。在.h中不再需要這樣做,但我仍然遵循這種模式。開始輸入- (IBAction) someName,自動完成將引導您完成。您可以看到(IBAction)作爲(void)的同義詞,但它告訴xcode IDE,它應該作爲操作鏈接到控件。 IBActions接收一個類型(id)或(UIView)或(UIControl)的參數。 (我不太確定實際的類型)。關鍵是它接收到對執行操作的控制實例的引用 - 發送者。典型模式:

-(IBAction) myButtonWasPressed:(UIButton *)sender; 

你可以寫一本關於在這個階段是否明智地將它輸出到UIButton的書籍。然而,它的工作原理,但你應該在方法內部測試,並確保它確實是一個UIButton(例如,通過使用isKindOfClass:[UIButton class]),您訪問是唯一的UIButtons任何屬性或方法之前。如果你只是對被調用的IBAction進行響應,根本不訪問發送者,那麼你可以忽略發送者甚至忽略該參數。 我認爲下面也應該工作: - (IBAction)myButtonWasPressed;

當然,您需要在.m文件中實現該方法。

您可以通過在IB中拖動一條線,以類似於該屬性的方式將此操作鏈接到控件。在按鈕的情況下,您將被要求將其分配給一個事件。對於按鈕,touchUpInside事件不是一個不錯的選擇。如果你發現你有這樣做的理由,你可以爲許多事件承擔同樣的行爲。 (想不到任何理由,但它很好地工作)。

+0

感謝您的答案!這是非常有用的和內容豐富的。 – user1782677