fb_license

技術標籤

@selector (1) 初使化區塊 (1) 物件 (1) 物件導向 (2) 型別 (4) 封裝 (1) 流程控制 (1) 陣列 (3) 推論型別 (2) 實機測試 (1) 蓋索林(gasolin) (1) 模組 (1) 憑證 (1) 轉型 (1) 羅康鴻 (121) 類別 (1) 變數 (5) Accelerometer (1) ActiveRecord (1) Activity (1) AFNetworking (1) alloc (1) Android (3) Animation (1) App (1) App ID (1) APP上傳 (1) ASP.NET (1) AVAudioPlayer (1) block (1) C# (2) class (1) CLLocationManager (1) CLLocationManagerDelegate (1) CMMotionManager (4) Controller (1) delegate (1) DELETE語法 (1) Device Motion資料 (1) Dialog (1) DropDownList (1) dynamic language (2) Facebook SDK (9) FBRequest (5) FBRequestConnection (2) FMDB (1) Gesture Recognizers (6) GROUP BY (2) Gyro (1) HAVING (1) IBAction (1) IBOutlet (1) id (3) inheritance (1) init (1) Insert (1) instance variable (1) Interface Builder (1) iOS (70) iOS idea (7) iOS Introduction (1) Layout (1) Magnetometer (1) Menu (2) Method (2) MKMapView (1) MKPointAnnotation (1) MS SQL (5) Nil (1) NSArray (1) NSDictionary (1) NSError (1) NSFileManager & .plist (1) NSMutableArray (1) NSMutableDictionary (1) NSNotificationCenter (1) NULL (1) object (2) Objective-C (16) Objective-C idea (1) ORDER BY (1) Parameter (1) property (1) protocol (2) Provisioning (1) Proximate Sensor (1) Q and A (2) R類別 (1) Rails (9) RESTful SOA (9) Ruby (8) Scene (1) SEELECT (1) Segue (2) SEL (1) SELECT語法 (1) Shake (1) Simulator (1) SOA (8) SQL (6) SQL Server (5) SQL函數 (1) SQL彙總函數 SQL (1) SQLite (1) Storyboard (1) Style (1) Swift (1) Table (1) target & action (1) Theme (1) Toast (1) TRUNCATE TABLE語法 (1) UIActionSheet (1) UIActionSheetDelegate (1) UIActivityIndicatorView (1) UIAlertView (1) UIBarButtonItem (1) UIButton (1) UICollectionView (1) UICollectionViewDataSource (1) UIControl (9) UIDatePicker (1) UIImage (1) UIImagePickerController (2) UIImagePickerControllerDelegate (2) UIImageView (1) UILabel (1) UILongPressGestureRecognizer (1) UINavigationController (2) UIPanGestureRecognizer (1) UIPinchGestureRecognizer (1) UIProgressView (1) UIResponder (1) UIRotationGestureRecognizer (1) UISegmentedControl (1) UISlider (1) UIStepper (1) UISwipeGestureRecognizer (1) UISwitch (1) UITabBarController (1) UITableView (1) UITableViewDataSource (1) UITapGestureRecognizer (1) UITextField (1) UITextFieldDelegate (1) UITextView (2) UITextViewDelegate (1) UIToolBar (1) UIView (8) UIWebView (1) UPDATE語法 (1) var (2) VB.NET (7) View (4) WHERE子句 (1) XML (1)

2013/05/27

[iOS] IBOutlet標記 - 在Controller標記出Button按鈕的參照實體


idea...



使用"Interface Builder"建立的畫面,其中有許多控制元件在其中,
但…,要怎麼才可透過程式來控制畫面上的控制元件呢?!

我是iOS工程師,
我已經有了自訂的"Controller",
但...我怎麼還是控制不到放在底層View上面的Button按鈕?!
我是最底曾的View,在我上面住著一個Button按鈕,
Hello,Button按鈕!
Hello,我是Button按鈕 ,我住在最底層的View之上


我要控制你這個Button按鈕!
將你上面的文字變成"OK",
但我到底要怎麼做才好?!
我不是有個Controller了嗎?!

iOS工程師,我是Controller,
其實Interface Builder建立的畫面都是存在xml中的,
我並不知道有Button按鈕的存在,
因此你必須在我這個Controller上產生一個插座 - IBOutlet,
讓該Interface Builder知道,
Button按鈕必須與我連繫,
這樣你就可以透過我 ,
以程式的方式變更Button按鈕上的文字了!




第1步:建立一個名為"IBOutlet"的"Single View Application"專案。

第2步:選取"MainStoryboard.storyboard"檔案,並於右下方拖拉出"Round Rect Button"按鈕。




第3步:點選右上方Editor中的中間按鈕"Assistant editor",將Controller對應的Controller程式碼叫出來,此時您會停留在"ViewController.h"標頭檔上,您會發現這裡已經為您建立一個叫"ViewController"的自訂Controller。





第3步:接著,在ViewController中產生一個Button按鈕的插座 - Outlet

  • 3.1 對Button按鈕按右鈕(Mac觸碰板是雙指同擊觸碰),接著找到"New Referencing Outlet",右邊有個空心小圓點,按下它不放,並收它拖到@interface與@end之間,以產生此Button按鈕的Outlet。


  • 3,2 為這個Outlet取個"button"的名字(實際上即一個實體變數的名字),最後按下"Connect"完成連結。

  • 3.3 這時你會發現多了個@property名為button的屬性,而其中還有個與宣告屬性完全的關鍵字"IBOutlet",其中"IB"即是Interface Builder的縮寫,而"IBOutlet"即是Interface Builder用以記錄這裡有個Outlet用以連繫。


第4步:加上程式碼,以變更Button按鈕上的文字

  • 4.1 在"ViewController.h"的上方,按一下向右的箭頭,請它自動找到對應的"ViewController.m"實作檔,當您看到"@implementation"關鍵字即為實作檔,接著找到viewDidLoad()函式。




  • 4.2 於viewDidLoad()函式中加上變更Button按鈕的文字為的程式


- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self.button setTitle:@"OK" forState:UIControlStateNormal]; }



第5步:執行,您會發現button按鈕的字樣,真的透過程式變更成"OK"了。




檔案連結:IBOutlet.zip



運作原理:IBOutlet在Controller的標頭檔中只是一個標記,沒有任何作用,主要是讓Interface Builder可以認得這是一個插座,用以將Interface Builder上的View元件對應到相關的屬性上,而這個對應的資訊實際則保存在Interface Builder的xml檔中。當然,其他View元件也是可以透過IBOutlet的方式,將View元件對應到Controller上,以便後續的程式操作。


哈哈,我是一個Button按鈕,雖然您可以透過IBOutlet讓Controller控制我,但…對於你想叫我在"被你按下時"執行一些你想要作的動作、或是執行程式,門都沒有,你是沒辦法展控我的行為的!!