ios - 如何将 UIPickerView 的值保存为字符串?

标签 ios nsstring uipickerview retain

我试图将 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/

相关文章:

ios - UIToolbar 在带有 UIPickerView 的自定义 UITableViewCell 中没有响应

ios - UIPickerView 不加载行

ios - 使用swift从解析中检索两个表中的数据

ios - NSString componentsSeparatedByString "&"但忽略 "& amp;"

ios - 应用程序崩溃但在调试器控制台中仍然显示 "running..."

objective-c - 在 Cocoa 中的不同类中设置变量

ios - 查找与特定字符串的匹配项

ios - UIPickerView - 无法在 ios7 中点击项目进行选择

ios - 将 UITextView 占位符/文本放置在左上角

iphone - 滚动键盘覆盖的文本字段