如何从 UIAlertController 向 UIPickerView 添加行

How do I add rows to UIPickerView from UIAlertController

我有一个 UIPickerView

中定义的数组获取数据
friends = [NSArray arrayWithObjects: @"jim", @"joe", @"anne", nil];

我在选择器下方有一个按钮,可以将新朋友添加到选择器。 当按下按钮时,会弹出一个 UIAlertController,用户可以输入新朋友的名字。我可以将文本保存为字符串,但无法将其添加到数组中。我也尝试过使用 NSMutableArray's。

我是新手,所以所有意见都很好。我已经查看了类似的问题以寻求帮助,但没有任何效果。

谢谢!

好的,我会试着解释一下:

你声明了一个NSMutbleArray,你不能期望使用一个NSArray因为它是不可变的,你需要修改内容

    NSMutableArray *array;
    UIAlertController * view;
    @implementation ViewController


    - (void)viewDidLoad {
        [super viewDidLoad];
        NSArray* friends = [NSArray arrayWithObjects: @"jim", @"joe", @"anne", nil];
        array = [NSMutableArray arrayWithArray:friends];
// I added a UIPickerView in the StoryBoard, connected it to a property and the delegates and datasources.
        self.pickerView.delegate = self;
    }

然后声明UIPickerView的dataSource:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

    return 1;

}

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{

    return array.count;

}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{

    return array[row];

}

那么,然后你展示你的 UIAlertController,在这种情况下,我将在 TextViewReturn 中关闭它。

//This is an action connected to the button which will present the ActionController
- (IBAction)addFriend:(id)sender {



    view =   [UIAlertController alertControllerWithTitle:@"Add Friend" message:@"Write the friend to add"preferredStyle:UIAlertControllerStyleAlert];

    [view addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        textField.placeholder = @"Friend";
        textField.delegate = self;
        textField.tag = 01;
    }];

    [self presentViewController:view animated:YES completion:nil];

}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{

    if(textField.tag == 01){

        [array insertObject:textField.text  atIndex:array.count];
        [view dismissViewControllerAnimated:YES completion:^{
            [self.pickerView reloadAllComponents];
        }];

        return YES;

    }

    return YES;

}

这或多或少是你能做的,我是最具体的,因为你说你是初学者。

希望对您有所帮助。