gpt4 book ai didi

ios - swift 中的错误顺序 tableview.reloaddata()

转载 作者:行者123 更新时间:2023-11-30 13:31:37 25 4
gpt4 key购买 nike

我正在为“ list ”创建者编写代码。应用程序中有几个部分。一种是从头开始创建新的 list 。根据用户做出的选择, list 的一行将有一个复选框、输入字段或是/否分段开关。我设法使用 Parse 设置这一切,但有一个问题。

当我单击按钮时,会添加一个新行,我可以在此处输入一些日期。然后我可以再次点击同一个按钮,同样的事情会发生等等。

但是,当我添加第五行时,第五行将成为当前的第一行,而第一行现在是空行。我添加了下面的代码。由于所有不同的变量,它相当长,但我认为最重要的是'add' IBaction 和配置 TableView 的部分。有人可以帮我解决我的问题吗?

谢谢,斯文

Picture: This is what the mistake looks like. The last row is actually the one I configured as first row. The first row is now empty (off screen)

import UIKit
import Parse
import Foundation

var emptyone = true
class Homescreen: UITableViewController, UITextFieldDelegate {
var topField = [""]
var first = Bool()
var label1 = [""]
var switchEnab = [false]
var fieldEnab = [false]
var yesnoEnab = [false]
var topSegmentEnab = [false]
var topFieldEnab = [false]
var segmentName0 = [""]
var segmentName1 = [""]
var segmentName2 = [""]
var messageEnab = [false]
var message1 = [""]
var labelEnab = [false]
var field1 = [""]
var switch1 = [false]
var topSegment = [1]
var yesno1 = [1]
var nummer = Int()



// Add a new row
@IBAction func add(sender: AnyObject) {

first = true



self.label1.append("" as String!)
self.topField.append("" as String!)
self.segmentName0.append("" as String!)
self.segmentName1.append("" as String!)
self.segmentName2.append("" as String!)
self.message1.append("" as String!)
self.field1.append("" as String!)
self.switchEnab.append(false)
self.fieldEnab.append(false)
self.topFieldEnab.append(false)
self.yesnoEnab.append(false)
self.topSegmentEnab.append(false)
self.messageEnab.append(false)
self.labelEnab.append(false)
self.switch1.append(false)
self.yesno1.append(1)
self.topSegment.append(1)

self.tableView.reloadData()


}


@IBOutlet var celOpmaak: UITableView!


// Function initators
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
func busy(){
activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
}

func displayAlert(title: String, message: String){
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action) in

}))

self.presentViewController(alert, animated: true, completion: nil)
}


// Final save of the checklist
@IBAction func saveButton(sender: AnyObject) {
if last == true{

dispatch_async(dispatch_get_main_queue()) {
self.first = false
self.tableView.reloadData()
}



busy()

let newValues = PFObject(className: "clTypes")


newValues["taskName"] = ""
newValues["dateStamp"] = " - - "
newValues["topSegmentEnab"] = self.topSegmentEnab
newValues["segmentName0"] = self.segmentName0
newValues["segmentName1"] = self.segmentName1
newValues["segmentName2"] = self.segmentName2
newValues["topFieldEnab"] = self.topFieldEnab
newValues["topField"] = self.topField
newValues["label1"] = self.label1
newValues["label1Enab"] = self.labelEnab
newValues["fieldEnab"] = self.fieldEnab
newValues["field1"] = self.field1
newValues["switchEnab"] = self.switchEnab
newValues["switch1"] = self.switch1
newValues["yesnoEnab"] = self.yesnoEnab
newValues["yesno1"] = self.yesno1
newValues["topSegment"] = self.topSegment
newValues["messageEnab"] = self.messageEnab
newValues["message1"] = self.message1
newValues["clType"] = clType1
newValues["checklistTitle"] = checklistTitle1
newValues.saveInBackground()
self.activityIndicator.stopAnimating()
UIApplication.sharedApplication().endIgnoringInteractionEvents()
self.displayAlert("Checklist saved", message: "The checklist has been saved to the server succesfully")
self.dismissViewControllerAnimated(true, completion: nil)
self.tableView.reloadData()
self.performSegueWithIdentifier("overview", sender: self)


}else{
displayAlert("No final button", message: "Please add a 'last' cell to the checklist")

}
}



// VIEWDIDLOAD
override func viewDidLoad() {
super.viewDidLoad()

self.label1.removeAll(keepCapacity: true)
self.field1.removeAll(keepCapacity: true)
self.message1.removeAll(keepCapacity: true)
self.topField.removeAll(keepCapacity: true)
self.segmentName0.removeAll(keepCapacity: true)
self.segmentName1.removeAll(keepCapacity: true)
self.segmentName2.removeAll(keepCapacity: true)
self.switchEnab.removeAll(keepCapacity: true)
self.yesnoEnab.removeAll(keepCapacity: true)
self.topFieldEnab.removeAll(keepCapacity: true)
self.fieldEnab.removeAll(keepCapacity: true)
self.messageEnab.removeAll(keepCapacity: true)
self.labelEnab.removeAll(keepCapacity: true)
self.switch1.removeAll(keepCapacity: true)
self.topSegmentEnab.removeAll(keepCapacity: true)
self.yesno1.removeAll(keepCapacity: true)
self.topSegment.removeAll(keepCapacity: true)
last = false
//var helloWorldTimer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: Selector("sayHello"), userInfo: nil, repeats: true)


toeVoegen.wraps = false
toeVoegen.autorepeat = false
toeVoegen.maximumValue = 80
self.tableView.reloadData()


// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
self.navigationItem.rightBarButtonItem = self.editButtonItem()
}


override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return label1.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("cel", forIndexPath: indexPath) as! creatorCellTableViewCell
if cell == nil{
print("hoi")
let cell = tableView.dequeueReusableCellWithIdentifier("cel", forIndexPath: indexPath) as! creatorCellTableViewCell

if first == true{
cell.option1.delegate = self
func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}

print(self.label1)
print(Int(toeVoegen.value))
label1[indexPath.row] = cell.labelField.text!
}else{

// This part is only called when the 'final save button' has been activated

label1[indexPath.row] = cell.labelField.text!
field1[indexPath.row] = ""
yesno1[indexPath.row] = 1
topField[indexPath.row] = ""
// switchEnab, fieldEnab, yesnoEnab
if cell.degreeField.selectedSegmentIndex == 1{

labelEnab[indexPath.row]=false
topFieldEnab[indexPath.row]=true
topSegmentEnab[indexPath.row]=true
segmentName0[indexPath.row] = ""
segmentName1[indexPath.row] = ""
segmentName2[indexPath.row] = ""

if cell.typeField.selectedSegmentIndex == 0{

switchEnab[indexPath.row] = false
fieldEnab[indexPath.row] = true
yesnoEnab[indexPath.row] = true
messageEnab[indexPath.row]=false
message1[indexPath.row]=cell.messageField.text!
}else if cell.typeField.selectedSegmentIndex == 1{

switchEnab[indexPath.row] = true
fieldEnab[indexPath.row] = true
yesnoEnab[indexPath.row] = false
if cell.messageSwitch.on == true{
messageEnab[indexPath.row]=cell.messageSwitch.on
message1[indexPath.row]=cell.messageField.text!
}else{
messageEnab[indexPath.row]=false
message1[indexPath.row]="hallo"
}
}else if cell.typeField.selectedSegmentIndex == 2{

labelEnab[indexPath.row]=false
switchEnab[indexPath.row] = true
fieldEnab[indexPath.row] = false
yesnoEnab[indexPath.row] = true
messageEnab[indexPath.row]=false
message1[indexPath.row]=""
}


}else if cell.degreeField.selectedSegmentIndex == 0{

switchEnab[indexPath.row]=true
fieldEnab[indexPath.row]=true
yesnoEnab[indexPath.row]=true
labelEnab[indexPath.row]=true
messageEnab[indexPath.row]=false
message1[indexPath.row]=""
if cell.topVeld.selectedSegmentIndex == 0{

topSegmentEnab[indexPath.row] = false
topFieldEnab[indexPath.row] = true


segmentName0[indexPath.row] = cell.option1.text!
segmentName1[indexPath.row] = cell.option2.text!
segmentName2[indexPath.row] = cell.option3.text!
} else{

topSegmentEnab[indexPath.row]=true
topFieldEnab[indexPath.row]=false
}
}

}
}
return cell
}

最佳答案

这很可能与您重复使用单元有关。每次执行此操作时:

let cell = tableView.dequeueReusableCellWithIdentifier("cel",
forIndexPath: indexPath) as! creatorCellTableViewCell

有可能(当您的行数超过屏幕显示的行数时,很有可能)返回的单元格与该索引处的原始单元格不同。例如,当您向上滚动到第 #5 行并且第 #1 行不再显示在屏幕上时,您可能会得到与第 #1 行相同的单元格并显示在第 #5 行。当您重复使用单元格时,您必须每次都设置单元格的状态。例如:

let cell = tableView.dequeueReusableCellWithIdentifier("cel",
forIndexPath: indexPath) as! creatorCellTableViewCell

cell.labelField.text! = label1[indexPath.row]
// do this for every field that needs to be set

关于ios - swift 中的错误顺序 tableview.reloaddata(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36509753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com