0

動的にロードされ、ユーザーが同じカテゴリに属する​​さまざまなサービスから選択できるようにする 3 行の六角形を持つメニュー インターフェイスを開発しました。次に、API エンドポイントを呼び出して、関連データを含む JSON 応答を取得しましたが、これも正常に機能しています。

問題: メニューを初めて開いたとき (つまり、メニューが動的に作成されたとき) に、画像が間違った順序で表示されます。別のビューを呼び出してから同じメニューに戻ると、すべてが正しく表示されます。もちろん、この動作は非常に厄介ですが、これまでのところ、これを解決するための私の努力はうまくいきませんでした.

ここでは、六角形の最初の行に使用するコードを示します (2 番目と 3 番目は、この後に同様に順番に呼び出されます。

func readJSONforPacketsRow1(language:Int, category:Int, location:String){
print ("FIRST ROW")
Alamofire.request(.GET, "\(URL.base)packets/1,\(language),\(category),\(location)", parameters:nil,  encoding: ParameterEncoding.URL)
        .responseJSON { response in
            let json = JSON(data: response.data!)
            if let JSON = response.result.value {
                for packet in json.arrayValue


                {
                    let name = packet["name"].stringValue
                    let name_second = packet["name_second"].stringValue
                    let image = packet["image"].stringValue
                    let description = packet["description"].stringValue
                    let language = packet["language"].stringValue
                    let id = packet["id"].intValue
                    let packet_type = packet["packet_type"].intValue

                    let mypacket = Packet(id: id, packet_type: packet_type, name: name, name_second: name_second, description: description, image: image, language: language)

                    self.packetArray.append(mypacket)

                }


                if (self.packetArray.count > 0){
                //First row

                self.packetArray.sortInPlace{$0.id < $1.id}
                var buttonX: CGFloat = 60  // our Starting Offset, could be 0

                for i in 0..<self.packetArray.count {
                    self.indicator.startAnimating()


                    let URLc = NSURL(string: "\(URL.base)packetimages/\(self.packetArray[i].image)")!
                    let fetcher = NetworkFetcher<UIImage>(URL: URLc)
                    let cachedEntryKey = fetcher.key
                    self.cache.fetch(key:cachedEntryKey).onSuccess { image in
                        let imageData = UIImagePNGRepresentation(image)!
                        let cachedImage = UIImage(data: imageData, scale: 1)!
                        let button = UIButton(frame: CGRect(x: buttonX, y: 30, width: self.hexwidth, height: self.hexheight))
                        buttonX = buttonX + self.hexmargin
                        button.tintColor = UIColor.whiteColor()
                        button.backgroundColor = UIColor.clearColor()
                        button.setTitleColor(UIColor.blackColor(), forState: .Normal)
                        button.setImage(SliderImageButton.imageOfSliderButton(cachedImage, isSelected: false, text: "\(self.packetArray[i].name)", text2: "\(self.packetArray[i].name_second)"), forState: .Normal)
                        button.setImage(SliderImageButton.imageOfSliderButton(cachedImage, isSelected: true, text: "\(self.packetArray[i].name)", text2: "\(self.packetArray[i].name_second)"), forState: .Highlighted)
                        button.addTarget(self, action: #selector(PacketMenu.clickMe(_:)), forControlEvents: UIControlEvents.TouchUpInside)
                        button.tag = self.packetArray[i].id
                        self.view.addSubview(button)







                        }

                    }

                }
            }
    }
}

どんな助けでも大歓迎です!サルデーニャからどうもありがとう!

4

0 に答える 0