Ich habe eine benutzerdefinierte Zelle im Storyboard erstellt und eine ScrollView darin eingefügt. Nun, was ich tun möchte, ist, erstellen Sie mehrere Schaltflächen basierend auf den Daten von meinem Webservice. Unten ist der Code dafür:Swift-Buttons auf ScrollView in CustomCell, die einander überlappen
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: MainTableViewCell! = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath) as! MainTableViewCell
cell.titleLabel.text = self.postsData.objectAtIndex(indexPath.row).valueForKey("title") as? String
let imageurl = self.postsData.objectAtIndex(indexPath.row).valueForKey("image") as? String
cell.titleImage.load(imageurl!)
let jsonStringAsArray = self.postsData.objectAtIndex(indexPath.row).valueForKey("links")
let data: NSData = jsonStringAsArray!.dataUsingEncoding(NSUTF8StringEncoding)!
let anyObj: AnyObject? = try! NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0))
var yCoord:CGFloat = 15.0, xCoord:CGFloat = 0.0, buttonHeight:CGFloat = 30.0, buttonWidth:CGFloat = 100.0, buffer:CGFloat = 10.0,i = 0;
while i<anyObj?.count {
if cell.viewWithTag((indexPath.row+1)*1000+(i+1)) != nil{
print("fake")
}
else{
let button :UIButton = UIButton()
button.frame = CGRectMake(xCoord, yCoord, buttonWidth, buttonHeight)
button.setTitleColor(UIColor.greenColor(), forState: .Normal)
button.layer.borderWidth = 1.0
button.layer.borderColor = UIColor.greenColor().CGColor
button.layer.cornerRadius = 10.0
button.titleLabel?.font = UIFont(name: "Futura-Medium", size: 17)
button.tag = (indexPath.row+1)*1000+(i+1);
print(button.tag)
button.addTarget(self, action: #selector(MainViewController.linkButtonAction(_:)), forControlEvents: .TouchUpInside)
button.setTitle(anyObj?.objectAtIndex(i).valueForKey("title") as? String, forState: .Normal)
button.sizeToFit()
let tempWidth = button.frame.size.width + 10;
button.frame=CGRectMake(xCoord, yCoord, tempWidth, buttonHeight)
cell.buttonScrollView.addSubview(button)
xCoord += button.frame.size.width + buffer;
}
i += 1
}
cell.buttonScrollView.contentSize = CGSizeMake(xCoord, buttonHeight+10)
cell.clipsToBounds = true;
return cell
}
Der Code, den ich geschrieben habe, scheint perfekt zu arbeiten, es sei denn das Problem, dass mit Tasten von den anderen Zellen überlappen Tasten in der ersten und der letzten Zelle ist.
Die erste Zelle zeigt zuerst alle Tasten perfekt an, aber wenn ich nach unten scrolle und wieder zurückkomme, ist alles durcheinander.
Es wird angenommen, wie dies auf allen Zellen:
aber scheint wie folgt aus:
ich für Ansichten mit gleichen Tags in der Zelle Überprüfung versucht, und clipsToBounds, wie du im Code siehst, aber nichts hat für mich funktioniert.
Jede Hilfe wird geschätzt. Vielen Dank!
zweite Bildschirm überlappende Taste vor dem Scrollen oder nach Scrollen Bildschirm? –