从 pickerview 中的另一列确定一列值
Determine one column value from another column in pickerview
我正在处理一个包含 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];
}
根据文档,您必须为 UIPickerView 提供数据源和委托。数据源告诉视图有多少组件和行,而委托告诉它组件行的内容。假设您在委托中实现了 titleForRow:。由于这将根据选择进行更改,因此您需要做两件事:(i) 确保您的委托对象知道做出了哪个选择(例如 @"Spring")和 (ii) 然后您需要调用 UIPickerView reloadComponent: 方法,以便调用委托的 titleForRow: 方法。
示例:假设您的操作方法是 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 会将目标字符串与参数字符串进行比较。
我正在处理一个包含 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];
}
根据文档,您必须为 UIPickerView 提供数据源和委托。数据源告诉视图有多少组件和行,而委托告诉它组件行的内容。假设您在委托中实现了 titleForRow:。由于这将根据选择进行更改,因此您需要做两件事:(i) 确保您的委托对象知道做出了哪个选择(例如 @"Spring")和 (ii) 然后您需要调用 UIPickerView reloadComponent: 方法,以便调用委托的 titleForRow: 方法。
示例:假设您的操作方法是 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 会将目标字符串与参数字符串进行比较。