关于Cocoa Touch Controls的可扩展性的问题

时间:2009-07-11 23:54:30

标签: iphone cocoa cocoa-touch interface-builder

我是iPhone的编程新手,我想知道:各种控件的可扩展性如何?我们以按钮为例:

  • 我可以更改背景图片吗?
  • 当我按下它时,我可以让它变得更大吗?
  • 我可以更改字体吗?
  • 我可以使用自定义字体吗?
  • 我可以使用按钮图形代替文字吗?

2 个答案:

答案 0 :(得分:3)

使用Interface Builder中按钮的属性,可以在没有代码的情况下完成1,3,4和5。要更改字体,请在选中按钮的情况下调出字体面板(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];
}

答案 1 :(得分:2)

一般来说,对所有问题都是肯定的。您可以像构建其他类一样继承构成Cocoa触摸控件的各种UI *类,并在适当的方法中添加自己的自定义功能。唯一棘手的部分是弄清楚你的代码到底应该去哪里。

让我们看一下您的UIButton示例,并逐步了解您想要用它做什么。

背景图片

UIButton类已经有一个方法setBackgroundImage:forState:,可以让你更改按钮在处于几种状态之一时显示的UIImage,例如Normal,Highlighted,Disabled等。

例如,要更改图像,按钮会显示为“backgroundImage.png”的正常背景,“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设置背景图片(见上文)。