ios - 从空白行开始 UIPickerView

标签 ios objective-c nsarray uipickerview

我的应用程序从服务器提取数据以获取当前可供选择的组的列表。然后,它会在名为“创建新组”的顶部添加一行。这很好用,但它一开始就已经选择了这一行,所以我必须离开它,然后再次返回以选择它并激活键盘。如何添加一个选项以使其以空白行开头?我尝试过简单地在行中执行 + 2 而不是 + 1,并对所有内容进行排序,但它根本不起作用。非常感谢任何帮助。

-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component{
    return [pickerArray count] + 1;
}

#pragma mark- Picker View Delegate

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:
(NSInteger)row inComponent:(NSInteger)component{
    if (row == 0)
    {
        [self.theView.signUpView.additionalField resignFirstResponder];
        self.theView.signUpView.additionalField.inputView = nil;
        [self.theView.signUpView.additionalField becomeFirstResponder];

    }
    else {

    [self.theView.signUpView.additionalField setText:self.theGroup];
    }
}
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSString *groupName  = @"Create New Group";
    if (row != 0)
    {
        PFObject *object = pickerArray[row - 1]; // -1 to handle the array index
        self.theGroup    = object[@"GroupName"];
        groupName        = object[@"GroupName"];
    }
    return groupName;
}

最佳答案

此方法会将您的数组调整两倍,从而留出您请求的空白空间。我还引入了 switch 语句,以便更容易理解正在发生的事情。代码中添加了注释,以突出显示与您的请求相关的更改。

#pragma mark- Picker View Delegate

-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component{
    return [pickerArray count] + 2; // This offsets your blank line & "Create new group" option
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:
(NSInteger)row inComponent:(NSInteger)component{
    switch (row) {
            // Ignore 0 here since you don't want to handle the blank space
            case 1:
            [self.theView.signUpView.additionalField resignFirstResponder];
            self.theView.signUpView.additionalField.inputView = nil;
            [self.theView.signUpView.additionalField becomeFirstResponder];
            break;
        default:
            [self.theView.signUpView.additionalField setText:self.theGroup];
    }
}
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    switch (row) {
            case 0:
            return @"";
            case 1:
            return @"Create New Group";
        default:
            PFObject *object = pickerArray[row - 2];
            self.theGroup    = object[@"GroupName"];
            return self.theGroup;
    }
}

我添加了下图来展示使用一些通用数据时的情况。

enter image description here

关于ios - 从空白行开始 UIPickerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40270964/

相关文章:

ios - 如何创建带有将在 safari 中打开的链接的标签?

objective-c - 旋转 UIImage 固定角度

swift - 获取 Firebase 文档作为数组

ios - 用NSObject过滤NSArray

iphone - NSManagedObject 层次结构导入和导出

ios - 导航 Controller popToRootController() 后跟推送 Controller UI 错误

ios - 以编程方式为 PhotoScroller 平铺图像

objective-c - 使用音频单元(混音器主机)从 iPod 库而不是预先选择的声音文件播放。

ios - 为什么Objective-C中的 "try catch"会导致内存泄漏?

c++ - 创建具有给定格式的 C++ 字符串