- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个由两部分组成的问题,第一个问题是在我花了整整一周试图弄清楚这一点之后,我仍然一片空白。我终于让各个单元格显示与文本字段中的选择相关的适当数字,但仍然没有弄清楚为什么重新加载到表格 View 中的单元格也显示更新的文本字段。基本上,我只想仅在选定的行中更新 cardCounter 的文本字段,然后如果用户滚动回原来的位置(如果他们决定删除它),则会向他们显示该对象中有多少可用的计数器。
第二个问题是我正在尝试为总限制为 30 的 cardCount 创建一个计数器,并且对于所选的每个 cardCount 对象,这 30 个选择中的 1 个已缩小到 29、28、27 等。只是想完成我的第一个项目的一些小代码。
import UIKit
import CoreData
class CardSelectionViewController: UIViewController, UITableViewDelegate, UIAlertViewDelegate, UISearchBarDelegate, NSFetchedResultsControllerDelegate {
var passedDeckObject: Deck?
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var deckCardCount = 30
@IBOutlet weak var cardsListed: UITableView!
@IBOutlet weak var cardSearch: UISearchBar!
@IBAction func backButton(sender: AnyObject) {
}
@IBAction func saveCardSelection(sender: AnyObject) {
if deckCardCount != 30 {
let selectmorecards = UIAlertController(title: "Select More Cards", message: "Please Select More Cards To Complete Deck", preferredStyle: .Alert)
let okCardAction: UIAlertAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
selectmorecards.addAction(okCardAction)
self.presentViewController(selectmorecards, animated: true, completion: nil)
} else {
if deckCardCount == 30 {
let alertController = UIAlertController(title: "All Cards Correct?", message: "Are all the cards in the deck what you wanted?", preferredStyle: .Alert)
let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
let okAction: UIAlertAction = UIAlertAction(title: "OK", style: .Default) { (action) -> Void in
self.managedObjectContext?.save(nil)
self.presentViewController(alertController, animated: true, completion: nil)
}
}
}
}
var costfrc: NSFetchedResultsController!
var frc: NSFetchedResultsController = NSFetchedResultsController()
func getFetchedResultsController() -> NSFetchedResultsController {
frc = NSFetchedResultsController(fetchRequest: listFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
return frc
}
func listFetchRequest() -> NSFetchRequest {
let requiredClassName = passedDeckObject!.classSelected.classname
var requiredCardClasses = [Int]()
let fetchRequest = NSFetchRequest(entityName: "Cards")
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
switch(requiredClassName) {
case "Warrior":
requiredCardClasses = [1,10]
case "Shaman":
requiredCardClasses = [2,10]
case "Rogue":
requiredCardClasses = [3,10]
case "Paladin":
requiredCardClasses = [4,10]
case "Hunter":
requiredCardClasses = [5,10]
case "Druid":
requiredCardClasses = [6,10]
case "Warlock":
requiredCardClasses = [7,10]
case "Mage":
requiredCardClasses = [8,10]
case "Priest":
requiredCardClasses = [9,10]
default:
requiredCardClasses = [10]
}
fetchRequest.sortDescriptors = [sortDescriptor]
fetchRequest.predicate = NSPredicate(format:"cardClass IN %@", requiredCardClasses)
return fetchRequest
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let numberofRowsInSection = frc.sections?[section].numberOfObjects
return numberofRowsInSection!
}
//Mark cell displayed with colored text//
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: firstCardDetails = cardsListed.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! firstCardDetails
let listed = frc.objectAtIndexPath(indexPath) as! Cards
var cardCount = 0
var myDeckCards: DeckCards?
for eachDeckCard in listed.cardselections {
let myDeckCard = eachDeckCard as! DeckCards
if myDeckCard.cardsstored == passedDeckObject {
myDeckCards = eachDeckCard as? DeckCards
cardCount = myDeckCards!.numberSelected.integerValue
}
}
cell.cardName?.text = listed.name as String
if listed.cardType.isEqualToValue(1) {
cell.cardAttack?.text = "*"
} else {
if listed.cardType.isEqualToValue(2) {
cell.cardAttack?.text = "*"
} else {
cell.cardAttack?.text = listed.attack.stringValue
}
}
if listed.cardType.isEqualToNumber(1) {
cell.cardHealth?.text = "*"
} else {
if listed.cardType.isEqualToValue(2) {
cell.cardHealth?.text = "*"
} else {
cell.cardHealth?.text = listed.health.stringValue
}
}
cell.cardCost?.text = listed.cost.stringValue
if listed.cardType.isEqualToNumber(0) {
cell.cardType?.text = "Minion"
} else {
if listed.cardType.isEqualToNumber(1) {
cell.cardType?.text = "Spell"
} else {
if listed.cardType.isEqualToNumber(2) {
cell.cardType?.text = "Weapon"
}
}
}
if listed.rarity.isEqualToNumber(1) {
cell.rarityType?.text = "Legendary"
cell.rarityType?.textColor = UIColor.orangeColor()
} else {
if listed.rarity.isEqualToNumber(2) {
cell.rarityType?.text = "Epic"
cell.rarityType?.textColor = UIColor.purpleColor()
} else {
if listed.rarity.isEqualToNumber(3) {
cell.rarityType?.text = "Rare"
cell.rarityType?.textColor = UIColor.blueColor()
} else {
if listed.rarity.isEqualToNumber(4) {
cell.rarityType?.text = "Common"
cell.rarityType?.textColor = UIColor.grayColor()
} else {
if listed.rarity.isEqualToNumber(5) {
cell.rarityType?.text = "Starter"
cell.rarityType?.textColor = UIColor.blackColor()
}
}
}
}
}
if listed.cardClass.isEqualToNumber(1) {
cell.cardName?.textColor = UIColor(red: 0xbe/255, green: 0x23/255, blue: 0x0f/255, alpha: 1.0)
} else {
if listed.cardClass.isEqualToNumber(2) {
cell.cardName?.textColor = UIColor.blueColor()
} else {
if listed.cardClass.isEqualToNumber(3) {
cell.cardName?.textColor = UIColor(red: 0xE2/255, green: 0xA8/255, blue: 0x79/255, alpha: 1.0)
} else {
if listed.cardClass.isEqualToNumber(4) {
cell.cardName?.textColor = UIColor(red: 0xFF/255, green: 0xAA/255, blue: 0x00/255, alpha: 1.0)
} else {
if listed.cardClass.isEqualToNumber(5) {
cell.cardName?.textColor = UIColor(red: 0x22/255, green: 0x63/255, blue: 0x29/255, alpha: 1.0)
} else {
if listed.cardClass.isEqualToNumber(6) {
cell.cardName?.textColor = UIColor.brownColor()
} else {
if listed.cardClass.isEqualToNumber(7) {
cell.cardName?.textColor = UIColor(red: 0xBB/255, green: 0x76/255, blue: 0xE4/255, alpha: 1.0)
} else {
if listed.cardClass.isEqualToNumber(8) {
cell.cardName?.textColor = UIColor(red: 0x9E/255, green: 0xB5/255, blue: 0xFF/255, alpha: 1.0)
} else {
if listed.cardClass.isEqualToNumber(9) {
cell.cardName?.textColor = UIColor.grayColor()
} else {
if listed.cardClass.isEqualToNumber(10) {
cell.cardName?.textColor = UIColor.blackColor()
}
}
}
}
}
}
}
}
}
}
return cell
}
//reload content//
func controllerDidChangeContent(controller: NSFetchedResultsController) {
cardsListed.reloadData()
}
//selected row functions//
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var cardCount = 0
var myDeckCards: DeckCards?
let listed = frc.objectAtIndexPath(indexPath) as! Cards
var cell = cardsListed.cellForRowAtIndexPath(indexPath) as! firstCardDetails
cell.indexOfAccessibilityElement(listed)
// check: is there already a DeckCards object for this Card and this Deck?
let deckCardsSet = listed.cardselections
println("The set of DeckCards for that Card is \(deckCardsSet.count)")
for eachDeckCard in listed.cardselections {
let myDeckCard = eachDeckCard as! DeckCards
if myDeckCard.cardsstored == passedDeckObject {
// There is already a DeckCard object for this Card and currentDeck
myDeckCards = eachDeckCard as? DeckCards
}
}
if myDeckCards == nil {
// There is no DeckCard object for this Card and currentDeck
// So create one...
myDeckCards = NSEntityDescription.insertNewObjectForEntityForName("DeckCards", inManagedObjectContext: managedObjectContext!) as? DeckCards
myDeckCards!.cardsselected = listed
myDeckCards!.cardsstored = passedDeckObject!
}
// your code to determine numberSelected here; I'll assume 2!
cardCount = myDeckCards!.numberSelected.integerValue
deckCardCount = myDeckCards!.deckcardCount.integerValue
cardCount = cardCount == 2 ? 0 : cardCount + 1
myDeckCards!.numberSelected = cardCount
deckCardCount = deckCardCount - cardCount
cell.cardCounter.text = " " + cardCount.description
if deckCardCount == 30 {
if cell.selected {
deckCardCount = deckCardCount + 1
}
myDeckCards!.numberSelected = deckCardCount
myDeckCards!.numberSelected = cardCount
}
println(deckCardCount)
println(cardCount)
}
//searchBar contoller//
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
searchBar.setShowsCancelButton(true, animated: true)
let requiredClassName = passedDeckObject!.classSelected.classname
var requiredCardClasses = [Int]()
switch(requiredClassName) {
case "Warrior":
requiredCardClasses = [1,10]
case "Shaman":
requiredCardClasses = [2,10]
case "Rogue":
requiredCardClasses = [3,10]
case "Paladin":
requiredCardClasses = [4,10]
case "Hunter":
requiredCardClasses = [5,10]
case "Druid":
requiredCardClasses = [6,10]
case "Warlock":
requiredCardClasses = [7,10]
case "Mage":
requiredCardClasses = [8,10]
case "Priest":
requiredCardClasses = [9,10]
default:
requiredCardClasses = [10]
}
if !searchText.isEmpty {
// Clear out the fetchedResultController
frc = getFetchedResultsController()
// Setup the fetch request
let fetchRequest = NSFetchRequest(entityName: "Cards")
fetchRequest.fetchLimit = 565
fetchRequest.predicate = NSCompoundPredicate(type: .AndPredicateType, subpredicates: [NSPredicate(format: "name contains[cd] %@", searchText), NSPredicate(format: "cardClass IN %@", requiredCardClasses)])
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
println(fetchRequest.predicate)
//end//
//cost fetch request begins here//
let costfetchRequest = NSFetchRequest(entityName: "cardCost")
costfetchRequest.fetchLimit = 565
costfetchRequest.predicate = NSPredicate(format: "cardCost = %i", searchText)
let costSortDescriptor = NSSortDescriptor(key: "cardCost", ascending: true)
costfetchRequest.sortDescriptors = [sortDescriptor]
//end//
// Pass the fetchRequest and the context as parameters to the fetchedResultController
frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext:managedObjectContext!,
sectionNameKeyPath: nil, cacheName: nil)
// Make the fetchedResultController a delegate of the MoviesViewController class
frc.delegate = self
// Execute the fetch request or display an error message in the Debugger console
var error: NSError? = nil
if (!frc.performFetch(&error)) {
println("Error: \(error?.localizedDescription)")
}
// Refresh the table view to show search results
cardsListed.reloadData()
}
}
//search Cancel
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchBar.text = nil
searchBar.showsCancelButton = false // Hide the cancel
searchBar.resignFirstResponder() // Hide the keyboard
// Refresh the table view to show fetchedResultController results
cardsListed.reloadData()
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
override func viewDidLoad() {
super.viewDidLoad()
println(passedDeckObject?.deckname)
var nib = UINib(nibName: "firstCardDetails", bundle: nil)
cardsListed.registerNib(nib, forCellReuseIdentifier: "cell")
frc = getFetchedResultsController()
frc.delegate = self
frc.performFetch(nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
最佳答案
对于问题 #1...
当您使用可重用单元格时,在 cellForRowAtIndexPath
(或 prepareForReuse
)之外进行单元格更改通常不是一个好主意。也有异常(exception),但大多数时候,这是安全的选择。最好的策略是仅在其他方法中进行数据更改,然后重新加载受影响的单元格(或全部)。
由于单元格已缓存,因此每当使用单元格时,您对单元格所做的更改都会显示在屏幕上,除非您在返回单元格时明确覆盖更改。
您应该计算所需的内容并将其存储在 didSelectRowAtIndexPath
方法中的某个位置,然后在 cellForRowAtIndexPath
中更新它的显示。
关于swift - didselectrow 更新下面的多个单元格重新加载 TableView + 计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32608336/
我正在对 tableView 是否呈现单元格进行单元测试。 我发现 tableView.cellForRow(at:) 返回 nil,而 tableView.dataSource?tableView(
我有 Tableview 用于显示客户下的食品订单。其中包含水平 UIStackview。在 UIStackView UIStackview 中很少有一/两行标签和一个用于显示订单项的UITableV
我有 Viewcontroller,我在其中设置了 ScrollView 。在 scrollview 中,我有一个 tableview,它位于 Container 中,就在容器下方,当我将 table
我想在滚动时让我的第一个单元格始终位于 tableview 的顶部。 任何帮助都是可观的。提前致谢... 最佳答案 这是为 UITableView 创建标题 View 的方法 - (UIView *)
在我的应用程序中,我点击一行,它会在其下方展开另一行。我想生成一种随机颜色,当我单击一行时,行背景会变成该颜色,而它下面的展开行会变成相同的颜色。如何让行生成相同的随机颜色? 我创建了一个函数来生成随
我正在为这个问题苦苦挣扎,所以我需要你的帮助。基本上我已经编写了一个复杂的 TableView Controller (使用 NSFetchedResults 协议(protocol)等)并且已经在我
我正在使用 JavaFx 2.2。我遇到了一个问题,我无法在 TableView 列中放置不同的组件。例如我有两列 1) 回答 2) 答案类型 如果 AnswerType 包含“Multiple Ch
试图弄清楚如何在 javafx 2 中禁用表列的重新排序? 最佳答案 这是解决方案: tblView.getColumns().addListener(new ListChangeListener()
我一直在寻找有关将数据刷新到 tableview 的信息。我试图直接修改模型,但我遇到了一个错误。我修改了模型,但表格没有刷新,只有当我移动一列时,表格才会显示修改后的值。 为了给你展示一个例子(13
给定一个TableView,我需要检测单元格上的双击。 tableView.setOnMouseClicked(new EventHandler() { @Override publi
我成功创建了一个 TableView,其中将特定列分配给了数据模型类。该程序可以将 csv 文件解析为其中并在表中正确显示所有内容。在此阶段,滚动不是问题。 然后我想选择特定行并将它们发送到另一个表。
我尝试了所有方法来用数据填充 TableView。下一个代码在表中插入一个新行,但数据没有出现在表中。我试图为此找到解释,但没有成功。 请帮忙。我不知道怎么了。 在 controller.java 中
我尝试了所有方法来用数据填充 TableView。下一个代码在表中插入一个新行,但数据没有出现在表中。我试图为此找到解释,但没有成功。 请帮忙。我不知道怎么了。 在 controller.java 中
我有一个通过 Tableview 显示玩家的应用程序。用户可以“添加”一个新玩家并输入他的姓名、高度、体重、图片等...保存后将被添加到 Tableview 中。他们还可以点击每个玩家,然后将他们带到
对于大学,我必须编写一个小应用程序,其想法是创建一个小公式集合。这个概念是有一个类别列表,选择类别后您会收到一个公式列表。选择所需的公式后,您将看到公式计算器的 View 。 我正在努力获得第一个UI
如果我只加载一个 TableView ,我的 View 中必须有两个 TableView ,它工作正常。但是当我尝试使用下面的方法加载两个表格 View 时,它给出了以下异常。 未捕获异常“NSRan
我是 JavaFx 的新手,我正在尝试创建一个 TableView ,而 fxml 是使用场景生成器创建的。如果我运行该程序,该表不会获取值。我发现这个问题在某种程度上符合我的要求( javaFX 2
是否可以对 tableView 进行反向排序?我搜索了很多解决方案,但没有任何效果。 效果就像whatsapp聊天。 一个普通的tableView是: ---------- label 1 -----
我有一个有趣的问题。我有两个 TableView ,一个在另一个里面。我有一个结构,我想用它来将数据添加到我的 TableView 中。该结构有 2 个字符串项和另一个具有 3 个字符串项的结构的数组
我正在使用的方法 func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath
我是一名优秀的程序员,十分优秀!