11、UIView与常用组件(一)
通俗点讲,看得见、摸得着的就是UIView。贴上UIKit 和 UIView 的关系图:
UIKit关系图.png UIView关系图.pngUI组件使用
- 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表示常量,这只是一种习惯 ,还有的程序员习惯宏名全部大写,我们注重代码可读性简洁即可)。