创建工程项目和视图控制器
1、创建工程项目,新建一个UIViewController;
2、选中工程,右键-New File…选择“Cocoa Touch Class”-Next,给个合理的名称ViewController,再Next完成;
3、在AppDelegate.m文件包含#import "ViewController.h";
4、初始化创建ViewController的视图控制器,并用导航栏控制器包含。将之设置为根视图控制器。
1、在ViewController.h添加事件代理和数据源代理<UIPickerViewDelegate,UIPickerViewDataSource>;
2、在ViewController.h创建UIPickerView。
3、在ViewController.m初始化self.pickerView;
4、代理授权并添加至视图;
5、初始化需要列举的数据数组。
添加UIPickerView行列代理方法
1、列数:numberOfComponentsInPickerView;
2、行数:numberOfRowsInComponent;
3、行的高度:rowHeightForComponent;
4、行的宽度:widthForComponent
添加UIPickerView内容显示代理方法
1、每行显示的View:viewForRow;
2、每行显示的标题:titleForRow;
3、每行显示的标题字体、颜色等属性:attributedTitleForRow;
4、被选择行:didSelectRow。
为代理方法添加代码
1、numberOfComponentsInPickerView列数返回3列;
2、numberOfRowsInComponent行数根据某列返回相应行数;
3、rowHeightForComponent高度返回20.0f;
4、widthForComponent行的宽度根据需要返回。
5、viewForRow返回UIView,用来添加UILabel显示城市列表的;
6、attributedTitleForRow获取标题数组string,设置string的字体颜色等,18号粗体;
7、didSelectRow当滚动UIPickerView停止后,显示当前行为被选中行,打印输出。
编译执行,run得结果。
有时候我们希望可以设置UILabel的内边距,为了解决这个问题,设计MarginLabel如下,继承自UILabel:
实例化一个MarginLabel:
不设置内边距的时候:
设置内边距:
效果:
.h文件
----------------------------------------------------------------------------------------------------------------
#import
@interface ShowLabel : UILabel
@property ( nonatomic , assign ) UIEdgeInsets edgeInsets
@end
----------------------------------------------------------------------------------------------------------------
.m文件
----------------------------------------------------------------------------------------------------------------
#import "ShowLabel.h"
@implementation ShowLabel
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
UIEdgeInsetsinsets = self .edgeInsets
CGRect rect = [ super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets)
limitedToNumberOfLines:numberOfLines]
rect.origin.x -= insets.left
rect.origin.y -= insets.top
rect.size.width += (insets.left+ insets.right)
rect.size.height+= (insets.top+ insets.bottom)
return rect
}
- ( void )drawTextInRect:(CGRect)rect {
[ super drawTextInRect:UIEdgeInsetsInsetRect(rect, self .edgeInsets)]
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end
----------------------------------------------------------------------------------------------------------------
使用方法和系统方法一样
ShowLabel*areaLb1=[[ShowLabel alloc]init]
[cell.contentViewaddSubview:areaLb1]
areaLb1.edgeInsets=UIEdgeInsetsMake(5,5,5,5)//设置内边距
[areaLb1sizeToFit]//重新计算尺寸,会执行Label内重写的方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)