Как я могу создать несколько кнопок SwiftyJson и Almofire в Swift 4? - PullRequest
0 голосов
/ 29 сентября 2018

Это мои усилия:

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 = ["santa", "bugs", "superman", "batman"]

Спасибо за вашу помощь заранее

1 Ответ

0 голосов
/ 29 сентября 2018

Я нашел решение.Кнопка добавления должна быть запущена после полной загрузки 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()
            }

Спасибо за вашу посещаемость.

...