我试图将 UIPickerView 中的选择保存为字符串,但在关闭 View 后我似乎丢失了值。我怎样才能保留这个值(value)?
.m文件
/*********************************/
#pragma mark -
#pragma mark PickerView DataSource
//Below are the functions for the UIPicker:
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
return 1;
}
//count of categories array denotes how many elements the picker will have
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return arrCategorySelection.count;
}
//return the corresponding caregory
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return arrCategorySelection[row];
}
/*********************************/
#pragma mark -
#pragma mark PickerView Delegate
//Delegate method for the category picker
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
//trying to save the value as a string
selectedCategory = [arrCategorySelection objectAtIndex:row];
}
.h
@property (nonatomic, retain) NSString *selectedCategory;
最佳答案
属性直接绑定(bind)到声明它的 Controller 。要使用该属性,您需要在关闭 Controller 之前访问它,通常使用委托(delegate)调用。苹果有很多关于如何做到这一点的示例代码。以下是摘要。
假设 MasterView 正在呈现 PickerView。通常,你想用 segue 来做到这一点。
[self performSegueWithIdentifier:@"Present PickerView" sender:nil];
在 PickerView.h 中,您在 @interface 部分之前声明一个协议(protocol):
@protocol PickerViewDelegate <NSObject>
-(void)itemSelected:(NSString*)item;
@end
然后在@interface部分中,声明一个委托(delegate)属性
@property(weak)id<PickerViewDelegate> delegate;
在MasterView中,您需要在prepareForSegue方法中填充此委托(delegate)
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"Present PickerView"]) {
PickerView *controller = segue.destinationViewController;
controller.delegate = self;
}
}
您还需要实现委托(delegate)方法(请记住,MasterView 呈现和关闭 PickerView 是最佳实践)
-(void)itemSelected:(NSString*)item {
// do something with item
[self dismissViewControllerAnimated:YES completion:nil];
// depending on the presentation, you may need this instead
// [self.navigationController popViewControllerAnimated:YES];
}
现在在 PickerView.m 中,为用户建立某种方式来表明他已完成选择,比如点击右上角的保存按钮调用此方法:
-(IBAction)saveButtonTapped:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(itemSelected:)]) {
[self.delegate itemSelected:self.selectedCategory];
}
关于ios - 如何将 UIPickerView 的值保存为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874701/