2009-07-11 47 views
1

我是iPhone新手,我想知道:各種控件的可擴展性如何?讓我們以按鈕爲例:關於Cocoa Touch Controls的可伸縮性的問題

  • 我可以更改背景圖片嗎?
  • 當我按下它時,可以讓它變大嗎?
  • 我可以更改字體嗎?
  • 我可以使用自定義字體嗎?
  • 我可以使用按鈕圖形代替文字嗎?

回答

2

一般來說,對所有問題都是。您可以像構建其他類一樣繼承構成Cocoa touch控件的各種UI *類,並在適當的方法中添加您自己的自定義功能。唯一棘手的部分是弄清楚你的代碼應該放在哪裏。

讓我們來看看你的UIButton示例,並通過你想要做的事情來完成。

背景圖像

的UIButton的類已經有一個方法setBackgroundImage:forState:,讓你改變的UIImage按鈕時顯示它在幾個州,如正常,高亮,殘疾人之一,依此類推。

例如,改變圖像的按鈕顯示爲正常背景爲「backgroundImage.png」,這是在應用程序的包中的圖像文件:

//Presuming you have some UIButton *button: 
UIImage *bgImage = [UIImage imageNamed:@"backgroundImage.png"]; 
[button setBackgroundImage:bgImage forState:UIControlStateNormal];

成長較大

您可以通過在管理按鈕的視圖控制器.m文件中添加一個方法來更改按鈕的frame(UIView的繼承屬性),然後將該方法添加爲按鈕上控件事件的操作。

比方說,你想要按鈕的大小加倍。在viewDidLoad:或類似的地方,添加以下代碼:

[button addTarget:self action:@selector(growButton) 
      forControlEvents:UIControlEventTouchDown];

然後創建一個方法growButton用下面的代碼:

- (void)growButton { 
    CGRect currentFrame = button.frame; 
    CGRect newFrame = CGRectMake(currentFrame.origin.x - currentFrame.size.width/2, 
           currentFrame.origin.y - currentFrame.size.height/2, 
           currentFrame.size.width * 2, 
           currentFrame.size.height * 2); 
    button.frame = newFrame; 
}

這同時保持其中心相同的一倍按鈕的大小。 (小心你的按鈕並不在成長,當你這樣做你的視圖的邊緣。)

更改字體

簡單地改變的UIButton的font屬性 - 它設置爲一個新的實例UIFont,如下例所示:

button.font = [UIFont systemFontOfSize:16.0];

這會將按鈕的字體更改爲大小爲16的系統字體。

自定義字體

這是一個很棘手的問題,因爲我敢肯定你不能加載自己的自定義字體文件,即使你將它們包含在您的應用程序包。但是,您可以使用UIFont的fontWithName:size:類方法更改控件的默認字體。所有字體名稱均可通過UIFont的familyNamesfontNamesForFamilyName:方法獲得。

按鈕圖形代替文字

這是最簡單的五 - 只是不設置按鈕上的文本,而是設置背景圖像UIControlStateNormal(見上文)。

+0

我只打算將按鈕問題作爲示例,但哇!切換接受的答案。 – RCIX 2009-07-12 00:16:14

3

是的。

1,3,4和5可以使用Interface Builder中按鈕的屬性在無代碼的情況下完成。要更改字體,請使用所選按鈕調出字體面板(Command-T)。

使按鈕增長需要添加單擊時執行的代碼。你可以在你的視圖控制器中放入這樣幾行,並且它應該可以做到這一點:

- (void)buttonClicked:(id)sender 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration: 0.4]; 
    [sender setFrame:CGRectMake(--,--,--,--)]; //replace with slightly bigger button frame 
    [UIView commitAnimations]; 
}