我是新手,需要你的帮助。任何人都可以告诉我如何更改此代码,以便它生成一个字符串数组而不是一个整数数组。感谢您的时间和任何可能提供的帮助。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var objTable: UITableView!
var numberArray = NSMutableArray()
var selectedArray=NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
for index in 1...200 {
numberArray.add(index)
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return numberArray.count;
}
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell
{
let contact = numberArray.object(at: indexPath.row)
let cell:MyCustomClass = objTable.dequeueReusableCell(withIdentifier: "reuseCell") as! MyCustomClass
cell.textLabel?.text = String("Number \(contact)")
cell.tickButton.addTarget(self, action:#selector(ViewController.tickClicked(_:)), for: .touchUpInside)
cell.tickButton.tag=indexPath.row
if selectedArray .contains(numberArray.object(at: indexPath.row)) {
cell.tickButton.setBackgroundImage(UIImage(named:"Select.png"), for: UIControlState())
}
else
{
cell.tickButton.setBackgroundImage(UIImage(named:"Diselect.png"), for: UIControlState())
}
return cell
}
func tickClicked(_ sender: UIButton!)
{
let value = sender.tag;
if selectedArray.contains(numberArray.object(at: value))
{
selectedArray.remove(numberArray.object(at: value))
}
else
{
selectedArray.add(numberArray.object(at: value))
}
print("Selected Array \(selectedArray)")
objTable.reloadData()
}
func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: IndexPath) ->CGFloat
{
return 80.0
}
}
答案 0 :(得分:1)
试一试:
let stringArray: [String] = (1...200).map {"Number " + String(format: "%d", $0)}
然后删除此行:
let contact = numberArray.object(at: indexPath.row)
并更改此行:
cell.textLabel?.text = String("Number \(contact)")
要:
cell.textLabel?.text = stringArray[indexPath.row]
更新:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var objTable: UITableView!
// var numberArray = NSMutableArray()
let stringArray: [String] = (1...200).map {"Number " + String(format: "%d", $0)}
var selectedArray=NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
// for index in 1...200 {
// numberArray.add(index)
// }
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
// return numberArray.count;
return stringArray.count;
}
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell
{
// let contact = numberArray.object(at: indexPath.row)
let cell:MyCustomClass = objTable.dequeueReusableCell(withIdentifier: "reuseCell") as! MyCustomClass
// cell.textLabel?.text = String("Number \(contact)")
cell.textLabel?.text = stringArray[indexPath.row]
cell.tickButton.addTarget(self, action:#selector(ViewController.tickClicked(_:)), for: .touchUpInside)
cell.tickButton.tag = indexPath.row
if selectedArray .contains(stringArray[indexPath.row]) {
cell.tickButton.setBackgroundImage(UIImage(named:"Select.png"), for: UIControlState())
}
else
{
cell.tickButton.setBackgroundImage(UIImage(named:"Diselect.png"), for: UIControlState())
}
return cell
}
func tickClicked(_ sender: UIButton!)
{
let value = sender.tag;
if selectedArray.contains(stringArray[value])
{
selectedArray.remove(stringArray[value])
}
else
{
selectedArray.add(stringArray[value])
}
print("Selected Array \(selectedArray)")
objTable.reloadData()
}
func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: IndexPath) ->CGFloat
{
return 80.0
}
}
答案 1 :(得分:1)
如果您不熟悉地图功能等高阶函数,可以像这样使用for循环......
var numberArray = [String]()
for index in 1...200 {
numberArray.append(String(index))
}
这种方法的结论是numberArray是可变的,因为它是一个var,你应该避免在大多数情况下的可变性。
这是正确的方法,您可以看到,使用此numberArray是常量,我们不再更改其状态。
let numberArray = Array(1...200).map{String($0)}