code

버튼 누름을 기반으로 UIPickerView (새 데이터 배열 포함)를 어떻게 다시로드 / 새로 고침합니까?

codestyles 2020. 12. 27. 10:53
반응형

버튼 누름을 기반으로 UIPickerView (새 데이터 배열 포함)를 어떻게 다시로드 / 새로 고침합니까?


여기에 이미지 설명 입력

내가 선택기를 원했다면, 주 / 지방의 경우 예제를 보지 못했지만 위에 표시된 US / Can / Mex의 선택기를 모의했습니다. UIPickerView에 대한 NSMutableArray를 동적으로 전환 한 다음 US / Can / Mex 버튼을 클릭 할 때마다 어떻게 든 다시로드 할 수 있는지 궁금하십니까 ??? 어떻게해야하나요? 나는 어떤 접근 방식을 취합니까. 초보자가 올바른 방향으로 단서를 찾을 수있는 사람을 찾습니다.


데이터 소스와 델리게이트를 구현해야합니다.

버튼을 누르면 배열 포인터를 적절한 배열로 설정합니다.

전화보다 [thePicker reloadAllComponents];

-(IBAction) usButtonPressed:(id)sender{
    self.inputArray = self.usArray;
    [self.thePicker reloadAllComponents];
}

-(IBAction) mexicoButtonPressed:(id)sender{
    self.inputArray = self.mexicoArray;
    [self.thePicker reloadAllComponents];
}

데이터 소스 메소드 :

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


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [self.inputArray count];
}

대리자 메서드 :

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [self.inputArray objectAtIndex:row];
}

스위프트 : xcode 6.1

// 선택기의 구성 요소를 다시로드합니다 (트리거 작업 또는 버튼 내에서 사용됨).

self.pickerControl.reloadAllComponents();

전화로

thePicker.delegate = self;

다시 한 번 새로운 정보로 선택기보기를 강제로 새로 고칠 수있었습니다.


xcode-8의 신속한 3에서는 다음과 같이 didSelectRow 함수를 작성합니다.

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {


        self.view.endEditing(false)
        yourPickerView.selectRow(0, inComponent: 0, animated: true)
        yourPickerView.reloadAllComponents();

}

여러 선택기를 사용하거나 스위치 블록을 사용하여로드 할 데이터를 결정하고 선택기를 다시로드합니다.


버튼 누르기 동작에서

[self.pickerView selectRow:0 inComponent:0 animated:YES];

스위프트 3 & 4

나는 같은 문제가 있었지만 해결책이 작동하지 않았습니다.

그런 다음 DispatchQueue를 사용합니다.

DispatchQueue.main.async(execute: {
        self.picker.delegate = self
        self.picker.dataSource = self
        if self.pickerData.count > 0 {
            self.pickerTextField.text = self.pickerData[0]
            self.pickerTextField.isEnabled = true
        } else {
            self.pickerTextField.text = nil
            self.pickerTextField.isEnabled = false
        }
    })

참조 URL : https://stackoverflow.com/questions/8598271/how-do-i-reload-refresh-the-uipickerview-with-new-data-array-based-on-button-p

반응형