从pickerview中的另一列确定一列值
Posted
技术标签:
【中文标题】从pickerview中的另一列确定一列值【英文标题】:Determine one column value from another column in pickerview 【发布时间】:2015-03-29 01:54:07 【问题描述】:我正在处理一个包含 3 列的选择器视图。我想从第二列中确定第三列的值。这是我的部分代码
- (void)viewDidLoad
[super viewDidLoad];
Number=@[@"Trans",@"1st",@"2nd",@"3rd",@"4th",@"5th",@"6th",@"7th",@"8th",@"9th",@"10th",@"11th",@"12th"];
Season=@[@"Spring",@"Summer",@"Fall"];
Course=@[@"CHEM1100 General Chem I",@"CHEM2100 General Chem II",@"CHEM3511 Org Chem",@"CHEM3521 Org Chem II"];
// Course=@[@"Summer1",@"Summer2",@"Summer3"];
Course = [Course sortedArrayUsingSelector:@selector(compare:)];
Number =[Number sortedArrayUsingSelector:@selector(compare:)];
Season =[Season sortedArrayUsingSelector:@selector(compare:)];
这是我的问题,我怎样才能实现这样的目标
if (Season==@"Spring")
Course= @[@"CHEM1100 General Chem I",@"CHEM2100 General Chem II",@"CHEM3511 Org Chem",@"CHEM3521 Org Chem II"];
else if (Season==@"Summer")
Course=@[@"Summer1",@"Summer2",@"Summer3"];
对不起,我不知道用什么方法来完成代码。请问有什么办法吗?
为了显示列值,我使用以下代码:
- (IBAction)addCourse:(UIButton *)sender
NSInteger numRow=[picker selectedRowInComponent:kNumComponent];//0=1st,1=2nd,etc
NSInteger SeaRow=[picker selectedRowInComponent:kSeaComponent];//0=fall,1=spring,2=summer
NSInteger CourseRow=[picker selectedRowInComponent:kCourseComponent];
NSString *num=Number[numRow];
NSString *season=Season[SeaRow];
NSString *course=Course[CourseRow];
NSString *msg=[[NSString alloc ]initWithFormat:@"%@ ",course];
_courseLabel.text=[msg substringToIndex:8];
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
if (component==kNumComponent)
return [Number count];
else if(component==kSeaComponent)
return [Season count];
else return [Course count];
【问题讨论】:
您当前的titleForRow:
/viewForRow:
方法是什么样的?
感谢林赛的回复。请检查我的更新
【参考方案1】:
根据文档,您必须为 UIPickerView 提供数据源和委托。数据源告诉视图有多少组件和行,而委托告诉它组件行的内容。让我们假设您在委托中实现了 titleForRow:。由于这将根据选择而改变,您需要做两件事:(i)确保您的委托对象知道进行了哪个选择(例如@“Spring”)和(ii)然后您需要调用UIPickerView reloadComponent: 方法,以便您的委托的 titleForRow: 方法将被调用。
例子:假设你的action方法是componentSelected:
-(void)componentSelected:(id)sender
NSInteger row = [myPicker selectedRowInComponent:seasonComponent];
myDelegate.season = row;
[myPicker reloadComponent:courseComponent];
顺便说一句,值得养成非常小心使用“=”、“==”、isEqualToString: 等的习惯以避免错误。您的问题有几个基本的语法错误。线
if(season = @"spring")
应该是
if([season isEqualToString:@"spring"]);
不仅因为“=”是赋值,还因为如果参数之一是文字(本质上是指针比较),“==”就没有意义。 isEqualToString 会将目标字符串与参数字符串进行比较。
【讨论】:
哇,非常感谢。很有帮助。以上是关于从pickerview中的另一列确定一列值的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 SELECT 语句中具有重复列值的记录与 SQL 中的另一条记录合并?