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/

相关文章:

objective-c - 查找当前键盘的语言

ios - 旋转手势改变 View 框

ios - 为什么在我尝试在 objective-c 中执行isKindOfClass时这些输出为何不同?

swift - 如何使用 UIPickerView 确定 UITextField 的值?

ios - 将 NSString 设置为 NSURL 时,NSURL 返回 nil 值

ios - 如何获取一个 NSString 中 [...] 内的所有字符串?

IOS NSString 解码不工作

ios - Picker 尚未显示

ios - UIPickerView - 条件显示

javascript - uiwebview注入(inject)javascript调整字体大小