2017-12-02 18 views
0

uipickerview를 사용하여 노래를 선택합니다. 문제는 피커 뷰와 상호 작용하지 않고 재생을 누르면 (즉, 피커 뷰에서 이미 선택 /로드 된 첫 번째 곡을 재생하려고하는 경우) 오류가 발생합니다.uipickerview 기본 행을 선택하십시오.

치명적인 오류 :

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

      musicChoice = songs[row] 
    } 

를 내가 이해,/피커 뷰와 상호 작용하는 사용자가 스크롤하면이 단지 동수 - 그래서 어떻게 든 selectedRow를 사용하는 것을 시도하고있다 : (선택 사양) 값

나는 didSelectRow에 대한 설정 아래의 코드를 엉망진창이야, 어떤 생각이야? 아래

업데이트 pickerview 코드 :

var songs:[String] = [] 
var musicChoice = "Something" 

let foods = ["Apples", "Bananas", "Corn", "Beans", "Tomatoes"] 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return songs[row] 

} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return songs.count 
} 



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

    musicChoice = songs[row] 

} 

답변

1

DID가 선택 행 방법은 자기가 didSelectRow 그래서 당신이 바로 어떤 일을 초기화하지 않는 행과 상호 작용하지 않고있다라고 설명이 필요.

선택한 행 대신 항상 재생할 첫 번째 곡 값을 초기화 할 수 있습니다. 당신이 musicChoice 변수를 선언하면서

musicChoice = songs[0] 

을 즉. 그것은 그 목적을 해결할 것입니다.

+0

필자는이를 시도했지만, musicChoice 변수를 선언하기 전이 아닌 피커보기 코드 다음에 노래 [0] 만 사용할 수 있다고 말하면서 원래의 게시물을 업데이트했습니다. – Berro

+0

필자가'playSong' 메서드를 사용하는 것이 피커 뷰 대리자 코드와 완전히 다르다는 것을 이해했기 때문에 이전에 초기화 한 경우 피커 뷰를 터치하지 않고도 노래 [0]을 사용할 수 있어야합니다. UIViewController 클래스의 전체 코드를 공유해 주시겠습니까? – Jeet

+0

붙여 넣기를 복사하려고했는데 노래가 노래 배열에 추가 된 후 바로 제안을 추가한다고 생각했습니다. 트릭을 완료 한 것처럼 보입니다. 이렇게하면 노래가 노래 배열에 추가 된 후 musicChoice가 자동으로 노래 배열의 첫 번째 항목 (항상 첫 번째 노래 여야 함)으로 채워지고 항상 항상 첫 번째 옵션으로 표시됩니다. 피커보기 - 아니면 내가 잘못 했습니까? – Berro