動的にロードされ、ユーザーが同じカテゴリに属するさまざまなサービスから選択できるようにする 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)
}
}
}
}
}
}
どんな助けでも大歓迎です!サルデーニャからどうもありがとう!