Раскрытие подробностей, загруженное поверх предыдущего раскрытия подробностей
У меня есть вид карты с аннотациями, и у каждой аннотации есть соответствующая дата с днем, месяцем и временем.
Я нажимаю день на новый контроллер представления, а затем с помощью switch
чтобы увидеть, в какой день месяца он выпадает, а затем отобразить соответствующий значок календаря. Я не могу поставить func
где-нибудь, кроме viewDidAppear, который вызывает короткую задержку и два, мешает мне использовать
for view in self.view.subviews {
view.removeFromSuperview()
}
Итак, два вопроса:
- Как я могу вызвать функцию dayCalendar перед viewDidAppear (где-либо еще я пытался поставить код, он возвращает ноль)
- как я могу предотвратить появление моих подробных раскрытий друг на друге?
Это код, отвечающий за показ изображения:
override func viewDidAppear(animated: Bool) {
dayCalendar()
}
func dayCalendar() {
switch day {
case 1:
let calendarDay = "Calendar 1-50.png"
let calendarDayImage = UIImage(named: calendarDay)
let calendarDayImageView = UIImageView(image: calendarDayImage!)
calendarDayImageView.frame = CGRect(x: 25 , y: 350, width: 50, height: 50)
self.view.addSubview(calendarDayImageView)
case 8:
let calendarDay = "Calendar 8-50.png"
let calendarDayImage = UIImage(named: calendarDay)
let calendarDayImageView = UIImageView(image: calendarDayImage!)
calendarDayImageView.frame = CGRect(x: 25 , y: 350, width: 50, height: 50)
self.view.addSubview(calendarDayImageView)
case 11:
let calendarDay = "Calendar 11-50.png"
let calendarDayImage = UIImage(named: calendarDay)
let calendarDayImageView = UIImageView(image: calendarDayImage!)
calendarDayImageView.frame = CGRect(x: 25 , y: 350, width: 50, height: 50)
self.view.addSubview(calendarDayImageView)
case 12:
blahh blahh blahh all the way down
case 31:
let calendarDay = "Calendar 30-50.png"
let calendarDayImage = UIImage(named: calendarDay)
let calendarDayImageView = UIImageView(image: calendarDayImage!)
calendarDayImageView.frame = CGRect(x: 25 , y: 350, width: 50, height: 50)
self.view.addSubview(calendarDayImageView)
default:
println("Default")
break
}
}
1 ответ
Прежде всего: почему вы на самом деле переключаетесь? Насколько я могу сказать, код может быть уменьшен до
func dayCalendar() {
if day < 1 || day > 31 {
return
}
let calendarDay = "Calendar \(day)-50.png"
let calendarDayImage = UIImage(named: calendarDay)
let calendarDayImageView = UIImageView(image: calendarDayImage!)
calendarDayImageView.frame = CGRect(x: 25 , y: 350, width: 50, height: 50)
self.view.addSubview(calendarDayImageView)
}
Вы можете переместить вызов на viewWillAppear
,
Чтобы исправить наложение закрытий деталей, у вас есть два варианта:
- удалить добавленное
calendarDayImageView
каждый раз, когда вы отображаете новый день.
или (намного лучше)
- повторно использовать уже добавленное представление изображения, если оно уже присутствует (возможно, потребуется создать переменную lazy) и просто изменить отображаемое изображение.
Последнего вы можете достичь следующим образом:
// add this variable to your class
lazy var calendarDayImageView: UIImageView = {
[unowned self] in
let imageV = UIImageView(frame: CGRect(x: 25 , y: 350, width: 50, height: 50))
self.view.addSubview(imageV)
return imageV
}()
// change the dayCalender to make use of the newly added variable
func dayCalendar() {
if day < 1 || day > 31 {
return
}
let calendarDay = "Calendar \(day)-50.png"
let calendarDayImage = UIImage(named: calendarDay)
calendarDayImageView.image = calendarDayImage
}
В качестве альтернативы вы можете просто переместить инициализацию представления внутри viewDidLoad и иметь dayCalender
снова только установить фактическое изображение - но я люблю ленивые переменные;)