2017-03-25 1 views
1

UIDatePicker가 있고 코드를 기반으로 테이블보기의 셀을 선택할 때마다 날짜 선택 도구가 다시 만들어 지거나 날짜 선택 도구와 비슷한 점이 있다고 생각합니다. 다시 생성됩니다. 나는 싱글 톤 (singleton)이라고 불리는 것을 들여다 보았습니다. 그러나 신속하게 새로운 사람들이기 때문에 그들이 일하는 것에 대해 혼란 스럽습니다. 싱글 톤이이 문제를 예방할 수 있습니까? 그렇다면 내 코드에 어떻게 구현하나요? 그렇지 않으면이 문제가 발생하지 않도록 어떻게해야합니까?UIDatePicker가 여러 번 초기화되는 것을 방지하는 방법

let datePicker = UIDatePicker() 

func createDatePicker(indexPath: IndexPath, textField: UITextField){ 

    //Tool Bar 
    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 

    //Bar Button Item 
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: nil) 
    toolbar.setItems([doneButton], animated: true) 

    textField.inputAccessoryView = toolbar 

    textField.inputView = datePicker 



} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 


    if(indexPath.row != 0){ 

     let cell = tableView.cellForRow(at: indexPath) as! TableViewCell2 

     cell.textField.isUserInteractionEnabled = true 

     cell.textField.delegate = self 

     if(indexPath.row == 2 || indexPath.row == 3){ 

      createDatePicker(indexPath: indexPath, textField: cell.textField) 

     } 

     cell.textField.becomeFirstResponder() 


     if(indexPath.row == 1){ 

      cell.textField.placeholder = "Event Title" 

     } else if(indexPath.row == 2){ 

      cell.textField.placeholder = "Start Time" 

     } else if(indexPath.row == 3){ 


      cell.textField.placeholder = "End Time" 

     } 

    } 

} 

사전에 어떤 도움을 주셔서 감사합니다 다음은 함수 내 코드는 내가 createDatePicker와 기능 createDatePicker에게 전화를 걸 때 사용합니다!

class GlobalDatePicker: UIDatePicker { 
    static let shared = GlobalDatePicker() 
} 

당신은 당신의 코드에서 하나의 날짜 선택 인스턴스를 사용합니다 :

+0

모든 셀에 대해 별도의 날짜 선택 도구를 만드는 것이 왜 문제가됩니까? 'didSelect' 메쏘드 안에서 picker를 생성 할 필요가 없습니다. 셀의 속성 일 수 있습니다. – Sulthan

답변

1

싱글 톤 (무거운 너무하지만 종종 재사용 DateFormatters와 같은) 올바른 방법입니다.

발신자가 싱글 톤을 거치지 않고 인스턴스를 만들지 못하도록 private init()을 사용할 수도 있습니다.

class GlobalDatePicker: UIDatePicker { 
    static let shared = GlobalDatePicker() 
    private init() {} 
    // Your methods that modify the picker here... 
} 

그러나 당신은 또한 컨트롤러에 static variable을 할 수는 :

static var datePicker: UIDatePicker = { 
    let picker = UIDatePicker() 
    picker.datePickerMode = .date 
    return picker 
}() 
0

당신은 할 수 있습니다 datePicker 정적 같은 : 다음

static let datePicker = UIDatePicker() 

당신을 통해 갈 필요가 없습니다 하나씩 일어나는 것. 그러나 싱글 톤을 원할 경우 this question을 통하면 Swift-3에 싱글 톤 동작을하는 여러 가지 방법을 찾을 수 있습니다.

관련 문제