首页 > 代码库 > iOS开发UI篇—UIPickerView控件简单介绍
iOS开发UI篇—UIPickerView控件简单介绍
iOS开发UI篇—UIPickerView控件简单介绍
一.UIPickerView 控件
1.简单介绍:
2.示例代码
TXViewController.m文件
1 // Created by 鑫 on 14-10-15. 2 3 // Copyright (c) 2014年 梁镋鑫. All rights reserved. 4 5 // 6 7 8 9 #import "TXViewController.h" 10 11 12 13 @interface TXViewController ()<UIPickerViewDataSource,UIPickerViewDelegate> 14 15 @property (weak, nonatomic) IBOutlet UIPickerView *pickerView; 16 17 - (IBAction)randomFood; 18 19 @property(nonatomic ,strong)NSArray *foods; 20 21 @property (weak, nonatomic) IBOutlet UILabel *fruitLabel; 22 23 @property (weak, nonatomic) IBOutlet UILabel *mainLabel; 24 25 @property (weak, nonatomic) IBOutlet UILabel *drinkLabel; 26 27 28 29 @end 30 31 32 33 @implementation TXViewController 34 35 36 37 - (void)viewDidLoad 38 39 { 40 41 [super viewDidLoad]; 42 43 // Do any additional setup after loading the view,typically from a nib. 44 45 46 47 //初始化 48 49 // self.fruitLabel.text =self.foods[0][0]; 50 51 // self.mainLabel.text =self.foods[1][0]; 52 53 // self.drinkLabel.text =self.foods[2][0]; 54 55 //手动调用代理方法 所以可用for循环,上面不可以 56 57 // [self pickerView:nil didSelectRow:0inComponent:0]; 58 59 // [self pickerView:nil didSelectRow:0inComponent:1]; 60 61 // [self pickerView:nil didSelectRow:0inComponent:2]; 62 63 for ( intComponent = 0; Component < self.foods.count; Component++) { 64 65 [self pickerView:nil didSelectRow:0 inComponent:Component]; 66 67 } 68 69 70 71 } 72 73 74 75 76 77 //随机选中某一食物 78 79 80 81 - (IBAction)randomFood { 82 83 84 85 //生成随机数 86 87 88 89 //arc4random()%14; 生成0到14的随机数 ,[self.foods[0] count]取出第0列这个数组,这个数组在调用count这个方法 90 91 // [self.pickerViewselectRow:arc4random()%[self.foods[0] count] inComponent:0 animated:YES]; 92 93 // [self.pickerViewselectRow:arc4random()%[self.foods[1] count] inComponent:1 animated:YES]; 94 95 // [self.pickerViewselectRow:arc4random()%[self.foods[2] count] inComponent:2animated:YES]; 96 97 98 99 // 用for循环100 101 for (intcomponent = 0; component < self.foods.count; component++) {102 103 //第component列数组的总长度104 105 intcount = [self.foods[component]count];106 107 //之前的行号108 109 intoldrow = [self.pickerView selectedRowInComponent:component];110 111 //第几行 默认新的行号跟旧的行号一样112 113 introw =oldrow;114 115 116 117 // arc4random()%count等价arc4random_uniform(count);118 119 //保证行数不一样120 121 //之前的行号122 123 124 125 while (row ==oldrow) {126 127 row = arc4random()%count;128 129 }130 131 //让pickerView主动选中第component列第row行132 133 [self.pickerView selectRow:row inComponent:componentanimated:YES];134 135 136 137 //设置label的文字138 139 [self pickerView:nil didSelectRow:row inComponent:component];140 141 142 143 }144 145 146 147 148 149 150 151 152 153 154 155 }156 157 158 159 -(NSArray *)foods160 161 {162 163 if (_foods == nil) {164 165 _foods = [NSArray arrayWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"foods" ofType:@"plist"]];166 167 }168 169 return _foods;170 171 }172 173 174 175 176 177 178 179 #pragma mark ---数据源方法180 181 //一共多少列182 183 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView184 185 {186 187 return self.foods.count;188 189 }190 191 //列。(NSInteger)component 第(NSInteger)componentl列显示多少行192 193 -(NSInteger)pickerView:(UIPickerView *)pickerViewnumberOfRowsInComponent:(NSInteger)component194 195 {196 197 // 先取出第component列的数组198 199 NSArray *subfoods = self.foods[component];200 201 return subfoods.count;202 203 }204 205 206 207 208 209 #pragma mark - - 代理方法210 211 -(NSString *)pickerView:(UIPickerView *)pickerViewtitleForRow:(NSInteger)row forComponent:(NSInteger)component212 213 {214 215 //先取出第component列,在取出这个数组这一行216 217 return self.foods[component][row];218 219 }220 221 //选中第component列第row行222 223 -(void)pickerView:(UIPickerView *)pickerViewdidSelectRow:(NSInteger)row inComponent:(NSInteger)component224 225 {226 227 228 229 NSLog(@"选中了第%d列第%d行",component, row);230 231 if (component ==0){232 233 self.fruitLabel.text = self.foods[component][row];234 235 236 237 }238 239 else if(component==1)240 241 {242 243 self.mainLabel.text = self.foods[component][row];244 245 }246 247 else if(component == 2)248 249 {250 251 self.drinkLabel.text = self.foods[component][row];252 253 }254 255 256 257 258 259 260 261 262 263 264 265 266 267 }268 269 270 271 272 273 @end
实现效果:
二.UIPickerView 用法
1.UIPickerView的常见属性// 数据源(用来告诉UIPickerView有多少列多少行)@property(nonatomic,assign) id<UIPickerViewDataSource> dataSource;// 代理(用来告诉UIPickerView每1列的每1行显示什么内容,监听UIPickerView的选择)@property(nonatomic,assign) id<UIPickerViewDelegate> delegate;// 是否要显示选中的指示器@property(nonatomic) BOOL showsSelectionIndicator;// 一共有多少列@property(nonatomic,readonly) NSInteger numberOfComponents; 2.UIPickerView的常见方法// 重新刷新所有列- (void)reloadAllComponents;// 重新刷新第component列- (void)reloadComponent:(NSInteger)component; // 主动选中第component列的第row行- (void)selectRow:(NSInteger)rowinComponent:(NSInteger)component animated:(BOOL)animated; // 获得第component列的当前选中的行号-(NSInteger)selectedRowInComponent:(NSInteger)component; 3.数据源方法(UIPickerViewDataSource)// 一共有多少列-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;// 第component列一共有多少行- (NSInteger)pickerView:(UIPickerView *)pickerViewnumberOfRowsInComponent:(NSInteger)component; 4.代理方法(UIPickerViewDelegate)// 第component列的宽度是多少- (CGFloat)pickerView:(UIPickerView *)pickerViewwidthForComponent:(NSInteger)component;// 第component列的行高是多少- (CGFloat)pickerView:(UIPickerView *)pickerViewrowHeightForComponent:(NSInteger)component; // 第component列第row行显示什么文字- (NSString *)pickerView:(UIPickerView *)pickerViewtitleForRow:(NSInteger)row forComponent:(NSInteger)component; // 第component列第row行显示怎样的view(内容)- (UIView *)pickerView:(UIPickerView *)pickerViewviewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView*)view; // 选中了pickerView的第component列第row行- (void)pickerView:(UIPickerView *)pickerViewdidSelectRow:(NSInteger)row inComponent:(NSInteger)component;
iOS开发UI篇—UIPickerView控件简单介绍
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。