2014-11-13 2 views
0

저는이 작업을 신속한 https://github.com/skywinder/ActionSheetPicker-3.0을 사용하여 만들려고합니다. 문제는 내가 완료 버튼을 클릭하거나 블록이 호출되지 않는 버튼을 취소 할 때입니다. 어떻게 된거야? doneBlock을 done 변수로 설정하고 cancelBlock을 cancel 변수로 설정했습니다. 로그에 아무 것도 반환되지 않습니까? 당신의 변수의 사용 donecancel에 문제가있는 것처럼블록이 호출되지 않습니다

@IBAction func openClosePicker(sender: UIButton!) { 
    var stringPicker = ActionSheetStringPicker(title: "Nav Bar From Picker", rows: ["One", "Two", "A lot"], initialSelection: 1, doneBlock: {done in return}, cancelBlock: {cancel in return }, origin: sender.superview!.superview) 

    stringPicker.showActionSheetPicker() 

    let done: ActionStringDoneBlock = {(picker: ActionSheetStringPicker!, selectedIndex: NSInteger!, selectedValue : AnyObject!) in 
     println(selectedValue) 

    } 

    let cancel: ActionStringCancelBlock = {(picker: ActionSheetStringPicker!) in 
     println("Block Picker Canceled") 
    } 



} 

답변

3

는 느낌. 당신이 익명의 블록 내에서 단순히 그들을 언급 한 것처럼 보입니다. 이거 해봤 니?

@IBAction func openClosePicker(sender: UIButton!) { 
    let done: ActionStringDoneBlock = {(picker: ActionSheetStringPicker!, selectedIndex: NSInteger!, selectedValue : AnyObject!) in 
    println(selectedValue) 
    } 

    let cancel: ActionStringCancelBlock = {(picker: ActionSheetStringPicker!) in 
    println("Block Picker Canceled") 
    } 

    var stringPicker = ActionSheetStringPicker(title: "Nav Bar From Picker", 
              rows: ["One", "Two", "A lot"], 
              initialSelection: 1, 
              doneBlock:done, 
              cancelBlock:cancel, 
              origin: sender.superview!.superview) 

    stringPicker.showActionSheetPicker() 
} 
+0

이 작동 감사합니다! 이것이 프레임 워크이고, U에 대해 아무 것도 모른다는 것을 알고 있지만, 왜 selectedValue가 항상 nil을 반환하는지 알 수 있습니까? –

0

첫 번째 문제는 {cancel in return }cancel의 입력 변수로 클로저를 정의하고 돌아와 아무것도하지 않는 점이다. 더 긴 버전은 다음과 같습니다.

{ (cancel: ActionSheetStringPicker!) ->() in 
    return 
} 

대신 기존 폐쇄를 간단히 이름으로 부릅니다. 클로저를 직접 참조해야합니다 (canceldone).

둘째, 당신은 당신이 초기화에 전달할 수 있도록 stringPicker의 실제 제작하기 전에 당신의 클로저를 정의해야

@IBAction func openClosePicker(sender: UIButton!) { 
    let done = {(picker: ActionSheetStringPicker!, selectedIndex: NSInteger!, selectedValue : AnyObject!) in 
     println(selectedValue) 

    } 

    let cancel = {(picker: ActionSheetStringPicker!) in 
     println("Block Picker Canceled") 
    } 

    var stringPicker = ActionSheetStringPicker(
     title: "Nav Bar From Picker", 
     rows: ["One", "Two", "A lot"], 
     initialSelection: 1, 
     doneBlock: done, 
     cancelBlock: cancel, 
     origin: sender.superview!.superview 
    ) 

    stringPicker.showActionSheetPicker() 
}