繁体   English   中英

如何在Swift 4中通过SwiftyJson和Almofire创建多个按钮?

[英]How can I create multiple button by SwiftyJson and Almofire in swift 4?

这些是我的努力:

var cats = [[String:AnyObject]]()

func getAllCats(){
        _ = EZLoadingActivity.show("Loading...", disableUI: true)

        let param: [String: AnyObject] = ["apiKey": "???" as AnyObject]
        _ = Alamofire.request(APIRouters.GetAllCats(param)).responseJSON { (responseData) -> Void in
            if((responseData.result.value) != nil) {

                let getJson = JSON(responseData.result.value!)

                if (getJson["status"].stringValue == "200"){

                    if let resData = getJson["data"].arrayObject {
                        self.cats = resData as! [[String:AnyObject]]
                    }


                } else if (getJson["status"].stringValue == "404") {

                } else {

                }

            }

            _ = EZLoadingActivity.hide()
        }
    }

 var buttonY: CGFloat = 20  // our Starting Offset, could be 0
        for villain in cats {

            print("ok",villain["pt_name_Fa"])

            let villainButton = UIButton(frame: CGRect(x: 50, y: buttonY, width: 250, height: 30))
            buttonY = buttonY + 50  // we are going to space these UIButtons 50px apart

            villainButton.layer.cornerRadius = 10  // get some fancy pantsy rounding
            villainButton.backgroundColor = UIColor.darkGray
            villainButton.setTitle("Button for Villain: \(villain["pt_name_Fa"] ?? "" as AnyObject))", for: UIControlState.normal) // We are going to use the item name as the Button Title here.
            villainButton.titleLabel?.text = "\(villain)"
            villainButton.addTarget(self,action:#selector(villainButtonPressed),
                                    for:.touchUpInside)
            //            villainButton.addTarget(self, action: Selector(("villainButtonPressed:")), for: UIControlEvents.touchUpInside)

            self.view.addSubview(villainButton)  // myView in this case is the view you want these buttons added
        }

它不起作用,但是如果我在下面使用这样的数组,它就起作用了! var arrayOfVillains = [“圣诞老人”,“错误”,“超人”,“蝙蝠侠”]

感谢您的帮助

我找到了解决方案。 应该在Json完全加载后运行添加按钮:

var cats = [[String:AnyObject]]()
_ = EZLoadingActivity.show("Loading...", disableUI: true)

    let param: [String: AnyObject] = ["apiKey": "???" as AnyObject]
    _ = Alamofire.request(APIRouters.GetAllCats(param)).responseJSON { (responseData) -> Void in
        if((responseData.result.value) != nil) {

            print(responseData.request!)  // original URL request
            print(responseData.response!) // URL response

            let getJson = JSON(responseData.result.value!)

            if (getJson["status"].stringValue == "200"){

                if let resData = getJson["data"].arrayObject {
                    self.cats = resData as! [[String:AnyObject]]
                }
                if self.cats.count > 0 {
                    self.addButton()
                }

            } else if (getJson["status"].stringValue == "404") {
                _ = SweetAlert().showAlert("Ok", subTitle: "Api Error!", style: AlertStyle.warning)
            } else {
                _ = SweetAlert().showAlert("Error", subTitle: getJson["message"].stringValue, style: AlertStyle.warning)
            }

        }

        _ = EZLoadingActivity.hide()
    }


func addButton(){


    var buttonY: CGFloat = 20  // our Starting Offset, could be 0
    for villain in self.cats {

        let villainButton = UIButton(frame: CGRect(x: 50, y: buttonY, width: 250, height: 30))
        buttonY = buttonY + 50  // we are going to space these UIButtons 50px apart

        villainButton.layer.cornerRadius = 10  // get some fancy pantsy rounding
        villainButton.backgroundColor = UIColor.darkGray
        villainButton.setTitle("Button for Villain: \(villain["pt_name_Fa"] ?? "" as AnyObject))", for: UIControlState.normal) // We are going to use the item name as the Button Title here.
        villainButton.titleLabel?.text = "\(villain)"
        villainButton.addTarget(self,action:#selector(villainButtonPressed),
                                for:.touchUpInside)
        self.view.addSubview(villainButton)  // myView in this case is the view you want these buttons added
    }
}

请注意这部分代码:

if self.cats.count > 0 {
                self.addButton()
            }

感谢您的出席。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM