[xcode] UIbutton 按鈕 按鈕事件


來介紹一下Xcode UIbutton吧

下圖可以看到我在StoryBoard裡面已經拉進去了一個Button






接著在Button按住右鍵拉到.h檔,做連接跟宣告的動作。

然後再一次做連接,不過這次選的是IBAction,這個是一個按鈕事件。


接著再拉一個Label進到StoryBoard



接著來到.h檔。你會發現少了

@synthesize button1,label1;

label1.text = @"按鈕按下了";

你會發現到你的程式裡面少了這兩行。

@synthesize button1,label1;  可以打也可以不打,純粹是個人習慣,

如果不打這一行,當你需要使用到label1的時候,你就必須在開頭加入一個self,如下

self.label1


-(IBAction)action1:(id)sender{} 就是當按鈕按下所執行的事情啦。

我在裡頭寫了把label1的文字換成  按鈕按下了

用模擬器執行,按下按鈕文字就改變了。


根本不用寫任何的程式,就可以完成按鈕事件。

但是。。。如果我要有20個按鈕勒?

有20個按鈕在左手邊,先思考一下要怎樣做勒?

如果你打算從StoryBoard加入20個按鈕的話,也是可以,只是真的蠻累人的。



程式段

寫在-(void)viewDidLoad{}   這句話表示,當載入的時候要做哪些事情。

這邊直接給了一個for迴圈做20次,i的值從0到19

在這20次當中,每次都會產生一個新的按鈕加到畫面中,除了Y軸位置不同,跟按鈕

的tag值,以及按鈕title值不同。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
宣告按鈕 這個按鈕為預設樣式的按鈕

button.frame = CGRectMake(0,30+i*20,20,20);
按鈕的位置   (x軸 , y軸 , 寬, 高 )

[button addTarget:self action:@selector(actionbutton:) forControlEvents:UIControlEventTouchUpInside];
加入事件 當按鈕被按下在放開才執行(actionbutton:)

這一行就是指定要去執行-(IBAction)actionbutton:(id)sender{}裡面的東西。

[button setTitle:[NSString stringWithFormat:@"%d",i] forState:UIControlStateNormal];
按鈕在正常狀態所顯示的文字  title需要給字串,但i是數值,所以[NSString stringWithFormat:@"%d",i]就是把i變成字串的意思

button.tag = i;
很多元件都有tag,當你有多組相同元件時,給予數值就可以很方便地在其他地方判斷。



UIButton *button = sender;

為何這邊又再次宣告了一個button? 由於我們在迴圈當中宣告的button並不是全域變數,

所以需要透過sender來接,20個按鈕中,到底是哪一個按鈕被按下。

因此在這邊並非是一個新的button 而是把我們按下的按鈕 給傳過來。

再將上面給button.tag值,顯示到label1上面。


[self.view addSubview:button];
將按鈕加到view當中,這一行才會真正把按鈕加到畫面中。


不過勒,很多時候我們在按下按鈕的同時,還需要去更改其他按鈕狀態,

但是在迴圈中宣告的按鈕全都叫做button,況且在迴圈外面就無法找到這個按鈕了。

在.h檔宣告一個NSMutableArray陣列,跟以往的陣列不同,他是可以更改長度的,

一般陣列在宣告後長度就是固定,多多少少在使用上有些限制。



arraybutton = [[NSMutableArray alloc]init];
這是初始化,如果不做這一行,程式不
會有錯誤提示,但是不管你寫啥進去讀啥都是空的。

[arraybutton addObject:button];
接著就把button放進陣列裡面,實際上NSMutableArray可以放進去的東西蠻多元的。



接著按鈕事件中,寫一個迴圈,從0開始,做到陣列裡面數完為止,

接著要知道說裡面放的是UIButton 所以重新宣告他是一個button ,

但是裡面的值是從上面我們定義來得,接著把按鈕的title改變成按下的button.tag值。



接著就可以看到每個按鈕文字都變成你所按下的button.tag數值。


以前學陣列跟迴圈,總是在*號排列,不然就是陣列排序之類的事情。

說實在的這種學習方式,並不太好。甚至很多人學完程式,根本不知道這些有何意義?

實際要使用時,你有一身好本領卻不會施展?

會寫程式的人很多,但....要做些什麼或者怎樣應用才是重點!

沒有留言:

張貼留言