是的,這是我在教程中花費數小時之前的一個關鍵問題。我不認爲這是有經驗的程序員,只是潛入應用程序開發的文檔。
通常的方法是,在相關視圖控制器類(分別爲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
事件不是一個不錯的選擇。如果你發現你有這樣做的理由,你可以爲許多事件承擔同樣的行爲。 (想不到任何理由,但它很好地工作)。
這需要一點解釋,所以最好的做法可能是觀看Youtube上的iOS/XCode或Pluralsight等地方的視頻教程:http://pluralsight.com/training –
通常,右鍵單擊你的插座(按鈕等)在故事板,並將其拖動到.h文件 – Stas