2016-08-09 7 views
2

Я даже не уверен, что это принадлежит здесь, но мне нужна помощь.Доступ к розеткам из разных классов в Swift

В принципе, у меня есть 3 набора файлов: Раскадровка ViewController ж/ViewController Nib> Контроллер Nib> Контроллер

раскадровки tableviewcontroller загружает один из наконечников как ячейки таблицы, а другой просто вид который добавляется в верхнюю часть основного раскадровки.

Чтобы попытаться проиллюстрировать то, что я делаю, вот код:

let pickerView = UINib(nibName: "DateTimePickerView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! DateTimePickerView 

    let testFrame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 200) 

    pickerView.frame = testFrame 
    ReserveView.addSubview(pickerView) 
    pickerView.translatesAutoresizingMaskIntoConstraints = false 

    NSLayoutConstraint(item: pickerView, attribute: .Leading, relatedBy: .Equal, toItem: view, attribute: .LeadingMargin, multiplier: 1.0, constant: 0).active = true 

    NSLayoutConstraint(item: pickerView, attribute: .Trailing, relatedBy: .Equal, toItem: view, attribute: .TrailingMargin, multiplier: 1.0, constant: 0).active = true 

    NSLayoutConstraint(item: pickerView, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .BottomMargin, multiplier: 1.0, constant: 0.0).active = true 

Это добавляет перо к нижней части окна, которое отображается. То, что я пытаюсь сделать, это следующее:

В другом наконечнике, который загружается как ячейка таблицы: есть кнопки, метки и т. Д., С которыми я хочу взаимодействовать, из pickerView, который нарисован поверх представления.

Надеюсь, это изображение поможет вам в разъяснении того, что я пытаюсь сделать, и вы можете сказать мне, почему это неправильно. Потому что это не похоже на правильный путь.

В конечном итоге «pickerView» появится при нажатии кнопки, а затем скрыть, когда пользователь выбирает и подтверждает дату.

Вот фото: Drawing of what I tried to describe

Вот фактический проект, так что вы можете лучше видеть то, что я пытаюсь сделать: Actual Project SS

ответ

0

Из того, что я понимаю, у вас есть раскадровка, который загружает nib с таблицейView и ячейками в ней, а также наконечник с изображением подборщика.

Если ваша раскадровка содержит ссылку на таблицу и содержимое, которое необходимо изменить, вы можете использовать closures с помощью pickerview.

В вашем pickerview добавить следующее:

var didChange: ((value: String)->())? 

В классе раскадровки добавить следующий код:

func pickerDidChange(value: String) { 
    debugPrint("The picker changed") 
} 

Где вы инициализирует ваш взгляд сборщика, добавьте следующий раз над addSubview:

pickerView.didChange = pickerDidChange 

Теперь, в вашем pickerDidChange, вы берете необходимые данные и применяете их к ячейкам таблицыView, на которые вы ссылались.

В pickerview вы добавите следующее в методе OnChange:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if let didChange = didChange { 
     didChange("something") 
    } 
} 

Если вы будете использовать в UIDatePicker вместо, а затем возвращают NSDate вместо ... который я думаю, было бы более уместным.

Надеюсь, я правильно понял ваш вопрос, и это решает вашу проблему.

+0

Я немного смущен. В моем IBAction для события изменения я должен добавить эту функцию pickerView. Как я это называю? Прямо сейчас, вы правы, это объект NSDate. Но я просто обращаюсь к нему через свойство даты DateTimePicker. 'DateTimePicker.date' – Imperialized

+0

Действительно, мне нужно передать эту дату Object, обратно в VC, который загружает файл pickerView xib. Однако xib имеет свой собственный пользовательский класс типа UIView, у меня есть фактический сборщик как IBOutlet в этом классе. Надеюсь, это поможет. – Imperialized

+0

@Imperialized У вас возникла проблема, или вам все еще нужна помощь? –

Смежные вопросы