來介紹一下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數值。
以前學陣列跟迴圈,總是在*號排列,不然就是陣列排序之類的事情。
說實在的這種學習方式,並不太好。甚至很多人學完程式,根本不知道這些有何意義?
實際要使用時,你有一身好本領卻不會施展?
會寫程式的人很多,但....要做些什麼或者怎樣應用才是重點!
沒有留言:
張貼留言