My app pulls data from a server to get a list of current groups available to choose from. It then adds a row to the top of this called "Create New Group". This works great, but it starts off already selecting this row, so I have to navigate away from it, and then back again to select it and activate the keyboard. How can I add one more option to get it to start with a blank row? I have tried simply doing + 2 in the rows instead of + 1, and sorting everything down, but it simply doesn't work. Any help greatly appreciated.
-(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;
}
This approach adjusts your array by two, allowing for the blank space you requested. I also introduced switch statements to make it a bit easier to understand what is happening. Comments were added in code to highlight changes relevant to your request.
#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;
}
}
I included the image below to show what this looks like when using some generic data.