Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在上一次详细披露的基础上加载详细披露_Ios_Swift_Detail - Fatal编程技术网

Ios 在上一次详细披露的基础上加载详细披露

Ios 在上一次详细披露的基础上加载详细披露,ios,swift,detail,Ios,Swift,Detail,我有一个带有注释的地图视图,每个注释都有一个对应的日期,日期、月份和时间 我将日期推送到新的视图控制器,然后使用开关查看它在一个月的哪一天,然后显示相应的日历图标。我不能将func放在ViewDidDisplay之外的任何位置,这会导致短暂的延迟和两个延迟,阻止我使用 for view in self.view.subviews { view.removeFromSuperview() } 所以有两个问题: 如何在ViewDid出现之前调用dayCalendar函数(在我尝试放置代码

我有一个带有注释的地图视图,每个注释都有一个对应的日期,日期、月份和时间

我将日期推送到新的视图控制器,然后使用
开关
查看它在一个月的哪一天,然后显示相应的日历图标。我不能将
func
放在ViewDidDisplay之外的任何位置,这会导致短暂的延迟和两个延迟,阻止我使用

for view in self.view.subviews {
    view.removeFromSuperview()
}
所以有两个问题:

  • 如何在ViewDid出现之前调用dayCalendar函数(在我尝试放置代码的任何其他地方,它都返回nil)
  • 我如何防止我披露的细节相互重叠
这是负责显示图像的代码:

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
    }

}

首先,你为什么要切换?据我所知,代码可以简化为

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)
}

或者,您可以将视图的初始化移到viewDidLoad中,让
DayCalendar
再次只设置实际图像-但我喜欢lazy vars;)

这是非常有帮助的。但是我如何创建一个惰性变量并更改它显示的图像呢?@pablopicaso我添加了惰性变量并做了更多解释
// 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
}