Swift:使用tableview外部的按钮并检查选择了哪一行

时间:2016-12-20 22:25:58

标签: ios swift uitableview button

我有一个tableView。它不是tableViewController。在我的ViewController上,我有一个包含15个选项的tableView。我可以毫无问题地选择每个选项。所以我想使用一个不在视图控制器内部的按钮,当我选择它时,它确定选择了哪一行表。现在我只是出现一条警告消息,显示选择了哪一行。

基本上桌子的每一行都是一个不同的种族:矮人,小精灵等......在桌子视图的正下方是一个按钮。当我点击该按钮时,我想要一个警告显示已经选择了哪一行。

这是我到目前为止所做的:

class raceViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{

    @IBOutlet var raceInfoBtn: UIButton!
    @IBOutlet var raceTable: UITableView!

    // defines an array with the races
    let races = ["Dwarf", "Elf","Gnome","Half-Elf","Half-Orc","Halfling","Human", // core races
                "Ifrit","Oread","Sylph","Tengu","Undine", // featured races
                "Kitsune","Nagaji","Wayang"] // uncommon races// uncommon races

    // defines the stats array to correspond to the races array
    let stats = ["+2 Con & Wis, -2 Chr","+2 Dex & Int, -2 Con","+2 Con & Dex, -2 Str","Click to add","Click to add","+2 Dex & Chr, -2 Str","Click to add", // core races
                "+2 Dex & Chr, -2 Wis","+2 Str & Wis, -2 Chr","+2 Dex & Int, -2 Con","+2 Dex & Wis, -2 Str","+2 Dex & Wis, -2 Str", // featured races
                "+2 Dex & Chr, -2 Str","+2 Str & Chr, -2 Int","+2 Dex & Int, -2 Chr"] // uncommon races// uncommon races] //core

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return(races.count)
    }

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "raceCell")
        //cell.textLabel?.text = races[indexPath.row] + stats[indexPath.row]
        cell.textLabel?.text = races[indexPath.row]
        cell.detailTextLabel?.text = stats[indexPath.row]

        return (cell)
    }

    @IBAction func raceInfoBtn(_ sender: Any)
    {
        {
            let alertController = UIAlertController(title: "iOScreator", message:
                "dwarf", preferredStyle: UIAlertControllerStyle.alert)
            alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil))

            self.present(alertController, animated: true, completion: nil)
        }
    }

}

IBAction raceInfoBtn中我想要它来检查实际选择了哪一行。

2 个答案:

答案 0 :(得分:1)

raceTable.indexPathForSelectedRow应该为您提供所选的索引路径,您可以使用该路径在警报中显示正确的信息。

答案 1 :(得分:0)

据我所知,你有15个选择,每行都有自己的按钮,所以有15个按钮。 你想获得touchUpInside事件得到选定的行。

所以你必须在tableviewcell的内容视图中添加按钮。

现在在cellForIndexPath方法中,你必须在你的函数中添加addTarget,并将标记作为其indexPath.row。

现在将每个选定的行作为发件人的标记访问!!

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "raceCell")
    //cell.textLabel?.text = races[indexPath.row] + stats[indexPath.row]
    cell.textLabel?.text = races[indexPath.row]
    cell.detailTextLabel?.text = stats[indexPath.row]
    cell.yourButton.addTarget(self, action: #selector(raceInfoBtn), for: .touchUpInside)
    cell.yourButton.tag = indexPath.row
    return (cell)
}

@IBAction func raceInfoBtn(_ sender: UIButton)
{
    {
        let alertController = UIAlertController(title: "iOScreator \(sender.tag)", message:
            "dwarf", preferredStyle: UIAlertControllerStyle.alert)
        alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil))

        self.present(alertController, animated: true, completion: nil)
    }
}