我前面贴 - 如何阻止多个细胞能够在我的表视图中选择 - 答案是使用tableView.AllowsMultipleSelections=false
的TableView AllowsMultipleSelection - 仍然允许多重选择
我一直在努力,自惨遭失败,基本上它似乎并不服从这一规则。
我的期望输出应该一个小区选择和有一个绿色的勾旁边(这工作),如果选择一个新的小区,老勾去掉,并移动到新的当前单元格。
我已经尝试了许多方法和最新的是从选择的最后一个索引创建自己的索引路径 - 然后将配件以零和更改选定为false。这也是行不通的。请有人帮我解决我可能做错的事。
感谢
import UIKit
class QuizViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
var countries = ["Germany", "France", "England", "Poland", "Spain"];
var selected = -1;
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.allowsMultipleSelection = false;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.countries.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
println("indexpath \(indexPath.row)");
let cell = self.tableView.dequeueReusableCellWithIdentifier("CountryCell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = self.countries[indexPath.row];
cell.textLabel?.textAlignment = NSTextAlignment.Center;
let countryImage = String(self.countries[indexPath.row]) + ".png";
cell.imageView?.image = UIImage(named: countryImage);
let image: UIImageView = UIImageView();
cell.accessoryView = image;
return cell;
}
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
var cell = self.tableView.dequeueReusableCellWithIdentifier("CountryCell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = self.countries[indexPath.row];
cell.textLabel?.textAlignment = NSTextAlignment.Center;
let countryImage = String(self.countries[indexPath.row]) + ".png";
cell.imageView?.image = UIImage(named: countryImage);
let imageName = "tick.png";
let image: UIImageView = UIImageView(image: UIImage(named: imageName));
cell.accessoryView = image;
if(selected != -1){
//lets remove the tick from the previously selected cell and set selected to false
var cell = self.tableView.dequeueReusableCellWithIdentifier("CountryCell", forIndexPath: NSIndexPath(forRow: selected, inSection: 0)) as UITableViewCell
cell.accessoryView = nil;
cell.selected = false;
}
selected = indexPath.row;
}
}
在提出的解决方案尝试
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("CountryCell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = self.countries[indexPath.row];
cell.textLabel?.textAlignment = NSTextAlignment.Center;
let countryImage = String(self.countries[indexPath.row]) + ".png";
cell.imageView?.image = UIImage(named: countryImage);
if(cell.selected){
println("cell was set to selected at \(indexPath.row)");
let imageName = "tick.png";
let image: UIImageView = UIImageView(image: UIImage(named: imageName));
cell.accessoryView = image;
}else{
println("cell was NOT set to selected at \(indexPath.row)");
let image: UIImageView = UIImageView();
cell.accessoryView = image;
}
return cell;
}
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
var cell = self.tableView.dequeueReusableCellWithIdentifier("CountryCell", forIndexPath: indexPath) as UITableViewCell
cell.selected = true;
if(selected != -1){
var previous = self.tableView.dequeueReusableCellWithIdentifier("CountryCell", forIndexPath: NSIndexPath(forRow: selected, inSection: 0)) as UITableViewCell
previous.selected = false;
}
selected = indexPath.row;
tableView.reloadData();
}
你设置的tableview委托自我? – ytbryan 2014-10-08 15:47:59
我拖着表视图,视图控制器黄色按钮,在顶部 - 将图像添加到原来的职位现在 – Biscuit128 2014-10-08 15:49:32