ios - 为UIPickerView didSelectRow返回NSArray中字符串的第一个字符

标签 ios objective-c uitextfield nsarray uipickerview

我有一个UIPickerView,它返回带有4 NSArraystrings。当用户滚动UIPickerView时,UITextField将使用所选行进行更新。我想返回string中每个NSArray的第一个字符,并用该字符更新UITextField

从代码中可以看到,我尝试使用self.noiseLevelArray = [noiseArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];来实现此功能,我在几个不同的堆栈溢出问题中找到了它。

这是选择器的代码:

// Noise picker
self.noisePicker = [[UIPickerView alloc]init];
[noisePicker setDataSource:self];
[noisePicker setDelegate:self];
self.noiseArray = [[NSArray alloc]initWithObjects:@"4: Extreme Noise (Impossible)", @"3: Very Noisy (Loud Shouting)", @"2: Noisy (Shouting)", @"1: Not Noisy (Normally)", nil];
//self.noiseLevelArray = [noiseArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

// Call noisePicker method
[self noisePickerTextField];

这是我的选择器的代码:
// Picker components
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return [noiseArray count];
    //return [noiseLevelArray count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [noiseArray objectAtIndex:row];
    //return [noiseLevelArray objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSString *noiseString = [[NSString alloc]initWithFormat:@"%@", [noiseArray objectAtIndex:row]];
    //NSString *noiseString = [noiseLevelArray objectAtIndex:0];
    if ([self.empNoise1 isFirstResponder]) {
        self.empNoise1.text = noiseString;
    }
    else if ([self.empNoise2 isFirstResponder]) {
        self.empNoise2.text = noiseString;
    }
...

如您所见,无论UITextField中选择了哪一行,string都会更新为完整的UIPickerView。我希望它仍然显示完整的string,但仅使用第一个字符(在这种情况下为UITextField)更新1, 2, 3, or 4。任何帮助深表感谢!

最佳答案

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSString *noiseString = [[NSString alloc]initWithFormat:@"%@", [[noiseArray objectAtIndex:row] substringToIndex:1]];
    //NSString *noiseString = [noiseLevelArray objectAtIndex:0];
    if ([self.empNoise1 isFirstResponder]) {
        self.empNoise1.text = noiseString;
    }
    else if ([self.empNoise2 isFirstResponder]) {
        self.empNoise2.text = noiseString;
    }
}

尝试这个。它使用以下方法:
NSString * firstLetter = [word substringToIndex:1];

关于ios - 为UIPickerView didSelectRow返回NSArray中字符串的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035072/

相关文章:

ios - UIViewController 如何设法在 Swift 中拥有默认的无参数初始化程序?

ios - 无法将字符串转换为仅限 iOS 13.3 的 NSDate

ios - 子类可以创建与父类不同的协议(protocol)吗?

iphone - 向 NSFetchedResultsController 添加额外的部分

ios - 位置管理器 stopMonitoringForRegion 不工作

xcode - 放大和缩小 UIView

ios - 我传递的变量不会仅获取视频用户 ID 和个人资料图像 (Swift 3)

ios - 使用 Core Text 重新实现 UITextView 和 UITextField

ios - 如何将 TableView 单元格滚动到屏幕键盘之外?

arrays - 更改数组后无法在 Tableview 中重新加载数据?