从空白行开始 UIPickerView

Start off UIPickerView With Blank Row

我的应用程序从服务器中提取数据以获取可供选择的当前组列表。然后它在这个名为 "Create New Group" 的顶部添加一行。这很好用,但它已经从 select 这一行开始,所以我必须离开它,然后再次返回到 select 它并激活键盘。我怎样才能再添加一个选项让它以空白行开头?我曾尝试简单地在行中执行 + 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;
}
  1. 我想你需要设置 numberOfRows +2。
  2. 然后titleForRow:0return@"",titleForRow:1return@"Create New Group"
  3. 那么您需要第 select 行(如果不是自动selected,则以编程方式)
  4. 然后需要检查 didSelectRow 中的第 0 个、第 1 个和下一个值。

其他想法:

使用按钮添加到选择器 InputAccessoryView。并在此按钮上添加操作,并删除 didSelect.

中的逻辑

此方法将您的数组调整为两个,允许您请求的空白 space。我还引入了 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;
    }
}

我附上了下面的图片,以显示使用一些通用数据时的样子。