在圖形界面編程時,處理的第一成績就是若何將靜態界面與代碼聯系關系起來,或許說是代碼若何與界面上的對象
通訊, 代碼若何操作界面上的對象。在iPhone平台上,引入了IBOutlet與IBAction。經由過程在變量前增長IBOutlet
來講明該變量將與界面上的某個UI對象對應,在辦法前增長IBAction來講明該辦法將與界面上的事宜對應.
上面經由過程一個銜接收集辦事器.networkConnection)的例子來講明IBOutlet與IBAction。
界面上有host 與 port 的Text Field UI對象,一個Button對象。
所以代碼中須要界說兩個IBOutlet變量,分離用來界說host與port; 一個IBAction辦法,用來提議銜接舉措。
�.networkConnectionViewController.h文件中:
界說變量:
@interface.networkConnectionViewController : UIViewController {
UITextField *host;
UITextField *port;
}
將這兩個變量解釋為IBOutlet變量:
@property(nonatomic, retain) IBOutlet UITextField *host;
@property(nonatomic, retain) IBOutlet UITextField *port;
在NetworkConnectionViewController.m文件中增長:
@synthesize host;
@synthesize port;
翻開NetworkConnectionViewController.xib文件,拖兩個Text Field對象到下面。
按住Ctrl鍵,拖拽File's Owner到Text Field之上,會彈出Outlets選擇列表,在列表中可以看到host與port。
分離為兩個Text Field選擇Outlet變量。如許做了今後,界面上的Text Field對象就與法式中界說的變量就聯系關系起來,
當轉變變量的屬性時,就會浮現在界面上。
為了磨練變量能否與界面臨象聯系關系,在viewDidLoad辦法中給變量付值然後編譯運轉。
- (void)viewDidLoad
{
[super viewDidLoad];
host.text = @"192.168.1.100";
port.text = @"8080";
}
運轉後,可以在界面的Text Field中看到這些值,解釋變量與界面臨象聯系關系准確。從而便可以在界面中看到變量的值。
在NetworkConnectionViewController.h文件中增長一個IBAction辦法:
-(IBAction)connectNetwork;
在NetworkConnectionViewController.m文件中完成該辦法:
-(IBAction)connectNetwork
{
UIAlertView *alter = [[UIAlertView alloc] initWithTitle: @"Connection Network" message: @"sending command to the server" delegate: self cancelButtonTitle: @"OK" otherButtonTitles: nil];
[alter show];
[alter release];
//connect network
//............
}
翻開NetworkConnectionViewController.xib,拖一個Round Rect Button到下面。
然後按住Ctrl鍵,拖拽該button到File's Owner上,在彈出的IBAction列表中
選擇connectNetwork。如許當該button被按下彈起後就會挪用connectNetwork辦法。
IBOutlet與IBAction是iPhone運用開辟的基本,是勝利邁向iPhone平台運用開辟的第一步。
為何IBOutlet屬性是weak的?
由於當我們將控件拖到Storyboard上,相當於新創立了一個對象,而這個對象是加到視圖掌握器的view上,view有一個subViews屬性,這個屬性是一個數組,外面是這個view的一切子view,而我們加的控件就位於這個數組中,那末解釋,現實上我們的控件對象是屬於view的,也就是說view對加到它下面的控件是強援用。當我們應用Outlet屬性的時刻,我們是在viewController外面應用,而這個Outlet屬性是有view來停止強援用的,我們在viewController外面僅僅是對其應用,並沒有需要具有它,所所以weak的。
假如將weak改成strong,也是沒有成績的,其實不會形成強援用輪回。當viewController的指針指向其他對象或許為nil,這個viewController燒毀,那末對控件就少了一個強援用指針。然後它的view也隨之燒毀,那末subViews也不存在了,那末控件就又少了一個強援用指針,假如沒有其他強援用,那末這個控件也會隨之燒毀。
不外,既然沒有勢必Outlet屬性設置為strong,那末用weak就行了: ]
一個控件可以在viewController外面有多個Outlet屬性,就相當於一個對象,可以有多個指針指向它(多個援用)。
然則一個Outlet屬性只能對應一個控件,也就是說,假如有button1和button2,button1在viewController外面有一個名為button的Outlet屬性,此時button指向button1,然則假如用button2給button從新賦值,那末此時button指向button2。也就是說,後來的籠罩本來的。
一個控件可以在viewController外面觸發多個IBAction。好比有一個button控件,在viewController外面有幾個辦法,那末點擊button,會觸發一切的這些辦法。
假如我有多個控件,好比button1,button2,button3,它們也能夠同時綁定一個buttonClick辦法,不管點擊button1,button2照樣button3,都邑觸發這個buttonClick辦法。
下面說了,button1,button2,button3有能夠都觸發buttonClick辦法,假如想在buttonClick辦法外面辨別究竟是哪一個button觸發的能夠有好幾種做法。
可以給這三個button各設置一個Outlet屬性,然後在buttonClick外面斷定sender和哪一個Outlet屬性是統一對象,如許便可以辨別了。然則很顯著,如許其實不公道,由於創立的三個屬性有些糟蹋。
我們可以給三個button各加一個tag,在buttonClick外面經由過程switch(或許if...)斷定,sender的tag和給各個button加上的tag能否分歧,假如分歧則為統一對象。
【詳解iOS運用應用Storyboard結構時的IBOutlet與IBAction】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!