在循环结束时调用UIView类

时间:2016-08-27 14:09:16

标签: ios swift core-data uiview

我是快速编程的新手,正在测试一些场景。

我有一个UIView类,我用它来绘制东西。我将使用for循环将此UIView类作为子视图添加到我的主viewcontroller中多次。

我在coredata中有一个实体,它存储了我使用UIVIew类进行绘图的配置信息。每个条目都有详细信息,如ID,Diamension和绘图所需的其他一些细节。

从coredata获取数据后,我使用'for'循环遍历每个条目,然后使用从coredata检索的数据绘制(UIView类作为子视图)。

循环的每次迭代都需要使用UIView类创建新的子视图,其中维度和从coredata检索的其他详细信息。但我注意到它循环遍历所有条目并在循环结束时调用UIView类,即使.addsubView处于循环的中间。

我可以看到它创建了与核心数据条目相同数量的子视图,但由于视图在循环结束时被调用,因此所有子视图都是使用最后一个条目核心数据的详细信息创建的。

我的代码是这样的。请帮帮我。感谢。

主视图控制器。

   let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext
    do {
        let request = NSFetchRequest(entityName: "Projects")
        let results = try context.executeFetchRequest(request)
        if results.count > 0 {
            GlobalVariable.sharedManager.starty = 50
            for item in results as! [NSManagedObject]{
        let titleout = String(item.valueForKey("title")!)
                    let startxp1 = item.valueForKey("startx")
                    let startxp2 = item.valueForKey("starty")
        let projtag = item.valueForKey("pid")

        GlobalVariable.sharedManager.title = titleout 
                let DrawLanes = DrawProj(frame: CGRect(x: startx, y: starty, width: 500, height: 200))
                DrawLanes.backgroundColor = UIColor.clearColor()
                DrawLanes.userInteractionEnabled = true
        DrawLanes.tag = projtag 
                MainScroller.addSubview(DrawLanes)

            }
        }
    }catch {
        print ("there was an error in fetch")
    }

DrawProj

override func drawRect(rect: CGRect) {

    let button = UIButton(type: .System) // let preferred over var here
    button.frame = CGRectMake(24, 15, 300, 20)
    button.backgroundColor = UIColor.orangeColor()
    button.userInteractionEnabled = false
button.text = GlobalVariable.sharedManager.title
    self.addSubview(button)

}

1 个答案:

答案 0 :(得分:0)

我认为失败点是GlobalVariable.sharedManager.title = titleout并且实例化视图并不意味着它将被调用drawRect。

我的解决方案是在DrawLanes中创建一个新变量,并使用titleout

初始化变量

DrawLines.buttonTitle = titleout

并在drawRect put

button.title = self.buttonTitle