11、UIView与常用组件(一)

通俗点讲,看得见、摸得着的就是UIView。贴上UIKit 和 UIView 的关系图:

11、UIView与常用组件(一)_第1张图片
UIKit关系图.png
11、UIView与常用组件(一)_第2张图片
UIView关系图.png

UI组件使用

  • UIView
  • UIButton UIControl
  • UIImageView UILabel
  • UIAlertView UIActionSheet
  • UITextField UITextView
  • UIProgressView
  • UISwitch UISlider UISegmentedControl
  • UIScrollView
  • UIPageView
  • UIWebView
  • UIBarButtonItem
  • UIToolBar
  • UIActivityIndicatorView
  • UITableView

UIButton:

UIButton *pushButton = [UIButton buttonWithType:UIButtonTypeCustom];

如果你不想使用类方法创建也是可以的:

pushButton = [[UIButton alloc] init];

在设置 UIButton 组件的背景色时, 会经常设置 clearColor 这个颜色。


有时,我们在为 button 设置背景图片的时候,会因为图片大小的关系,导致出来的效果失真、不协调。解决方法一是让UI设计师制作一个大小合规的图片,另一种方法就是手动代码对图片进行拉伸:

UIImage *blueBGImage = [UIImage imageNamed:@"blueButton.png"];
UIImage *stretchableBlueBGImage = [blueBGImage stretchableImageWithLeftCapWidth:10 topCapHeight:20];

当使用 stretchableImageWithLeftCapWidth: topCapHeight: 方法进行拉伸的时候,它拉伸图片的直线部分,因此不会造成图片的失真(失真的效果就是本来图片时一个四角圆润的长方体,拉伸之后成为了椭圆形状)。方法的意思是分别从图片左上角往右和往下 ?points(同样会映射到图片从右往左,从下往上的部分,能保证图片四角都照顾到) 进行拉伸,只要确保输入的数字是在直线段,拉伸的效果就不会失真了。(主要是这个方法可以保证图片的四个角不会变化)注意,这个方法最后会生成一个新的图片,使用时注意选择。`

[pushButton SetBackgroundImage:stretchableBlueBGImage
                      forState:UIControlStateNormal];

当你希望在点击一个button之后,上面的title会发生变化,变成另外的文字,可以这样设置:

[presentButton setTitle:@"present modal view" forState:UIControlStateNormal];
[presentButton serTitle:@"clicked!" forState:UIControlStateHighlighted];

  上面两行代码,表示button在没有点击的时候,显示的title是present modal view,在点击之后没松开按钮的情况下title显示的是clicked!.


看下面一段代码:

[pushButton addTarget:self
               action:@selector(pushButtonClicked:)
     forControlEvents:UIControlEventTouchUpInside];

其中 addTarget: 参数代表执行的是谁。action:参数代表执行的是什么方法。至于为什么要在 pushButtonClicked 后面加冒号,是因为一般在这个方法名中都带有参数,所以都要加冒号(而参数一般就是本身)。一般我们会使用 UIControlEventTouchUpInside 这个点击事件,它是点击之后松开才会触发事件响应,这样会给误操作的用户一个修正的机会。直接按下就执行的方法是touchDown.
  看下面的一段代码:
设置宏可以保证代码的可读性(写在代码前面),即下面代码前两行。

#define kPushButtonTag          101
#define kPresentButtonTag       102

pushButton.tag = 100;
presentButton.tag = 200;

- (void)pushButtonClicked:(id)sender
{
    if (sender.tag == kPresentButtonTag) {

    } else if (sender.tag == kPushButtonTag) {

    }
}

- (void)presentButtonClicked:(id)sender
{

}

现在我们来介绍一下方法中带参数的作用。看上面的一段代码,有两个 selector 的方法,假设一种情况 :selector 的方法都指向一个同样的方法名例如 pushButtonClicked: 。如果需要做判断,就可以根据传入的button参数来判断。那么我们可以通过参数来获得各个button在提前设置的tag值来作出判断,选择使用哪一个方法。还存在一种情况,当代码太多的时候,我们找不到tag值,这时我们可以预先定义一个宏,如上面代码的第一和第二行的内容,这样代码就更具有可读性(宏名前带k表示常量,这只是一种习惯 ,还有的程序员习惯宏名全部大写,我们注重代码可读性简洁即可)。

你可能感兴趣的:(11、UIView与常用组件(一))